![]() |
Fehlermeldung beim canvasobject in Tshape
Hi, Wer kann helfen beim nutzen des Canvasobjects laden eines Bildes tritt s. code
Exception der Klasse EAcessvioalition auf. Wie kann ich auf dem canvas der Tshape-Komponente zeichnen. Bei d3 brauchte ich nur eine instanz erzeugen s:=ts.Create(form1); s.Parent:=form1; s.Width:=180; s.Height:=270; und dann cannvas.zeichenroutinen fertig Wie mache ich das bei D6 Personal um auf die ZeichenFläche mit canvas.Routinen zu greifen. Das shapeobject soll dann auf auser die Standartdshapes wie stellipse mit Polygon Dreiecke oder andere Figuren Zeichnen. Nur mit Image,Form habe ich keine Problehme der Art. Aber Paintbox,Tpanel......u.s.w var canvas:Tcanvas Muss ich hier die canvas:=Tcanvas.create(self) oder property canvas:Tcanvas read ...... write...... Defaults .. Habe auch im Forum nichts gefunden auser in Groupbox zeichnen oder s.canvas.handle oder api get....DC:HDC Vielen Dank im voraus biochip
Delphi-Quellcode:
constructor ts.create(aowner:tcomponent);
begin inherited create(aowner); end; procedure TForm1.Button1Click(Sender: TObject); begin Try s.Brush.Bitmap.Width:=186;//Hier Fehlermeldung Exception der Klasse Eacessvioalition s.Brush.Bitmap.height:=276; s.Brush.Bitmap.PixelFormat:=pf8bit;//Das Bild hat 8 Pixel pro Bit 256 Farben s.Brush.Bitmap.LoadFromFile('figurx2.bmp'); //s.Brush.Bitmap.Canvas.Rectangle(0,0,200,200); // s.canvas. ....... except s.free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin s:=ts.Create(form1); s.Parent:=form1; s.Width:=180; s.Height:=270; end; |
Re: Fehlermeldung beim canvasobject in Tshape
Hi,
Was soll "TS" denn für eine Klasse sein? Und von welchem Typ ist TS.Brush? Ich versteh noch nicht ganz, was du erreichen willst :( Die Zugriffsverletzung kommt wahrscheinlich daher, dass S.Brush.Bitmap noch nicht exisitert. Du musst es im Contructor von "TS" erst erzeugen. |
Re: Fehlermeldung beim canvasobject in Tshape
Hi, Dani Danke erst eimal das du versucht zu helfen.
Du hast Recht wenn Ein object in der Tshape nicht existiert kann ich nicht drauf zu greifen . Wenn man nach der erzeugten intanz hier z.B S:Ts; s:=Ts.create(self); wenn S. eingibt in Delphi bei allen Objectvariablen werden die Methoden, Functionen,Var,Propertys, Ereignisseigenschaften , angezzeigt die wie hier in Tshape deklariert wurden und die benötigten units auf die sie zugreift. Meine Frage all diese sind dann auch für mich verfügbar oder sehe ich das falsch. S.Brush.---Metoden,Var u.s.w werden angezeigt Nach s. <Enter> gedrückt wird nur die Propery Brush:Tbrush angezeigt und das ist nur die Eigenschaft brush ist dsa richtig.! aber das Tcanvasobject wird nicht angezeigt,muss erzeugt weren ist das richtig? aber wie ? Darum geht mirs ja -------------------------------------------------------------------- var canvas:Tcanvas Muss ich hier die canvas:=Tcanvas.create(self) oder property canvas:Tcanvas read ...... write...... Defaults .. Habe auch im Forum nichts gefunden auser in Groupbox zeichnen ------------------------------------------------------------------------ oder s.canvas.handle oder api get.... DC:HDC brauche ich ein Handle Ts.canvas.handle und über API function Zugriff auf Tcanvas ! oder wie ich oben schon angegegeben hatte In Delphionlnehilfe D6 Objechirerchie kein Canvssobject vorhanden also muss erzeugt werden weil Borland keins spendiert hat wie in D3 ich kenne nur Personal . In D3 ist es demzufolge schon imlementiert. u. brauch nicht erzeugt werden. da nützt auch der Konstrukt canvas:=Tcanvas.create nichts wenn Tshape kein Tcanvas besitzt. Gibt es den Literatur darüber oder ist das In der Proffessional Online viel mehr enthalten ich weis es ja nicht. Kannst Du mir ein Beispiel bringen wie man das macht ? Da wäre ich sehr dankbar oder wie kan mans sonst lernen .(D-bücher Foren Wo); Vielen Dank im voraus biochip |
Re: Fehlermeldung beim canvasobject in Tshape
Poste doch mal die Projekt - Datei(en), dann kann ich dir sagen, was genau mit der Klasse nicht stimmt =)
|
Re: Fehlermeldung beim canvasobject in Tshape
Hi, Dani ich habe in der Onlinehilfe wegen den Tcanvas nochmal nach geschaut und habe eine
Beispielprocedur gefunden die aber meistens nur halwegs eine Einführung geben aber immer noch verfollstädigt werden müssen. Bei mir wärs ein richtiges Beispiel wenn es wie ein Demo funktioniert und man dann selbst den Schwierigkeitsgrad nach Bedarf erhöht. Hier soll auch Canvasobject erzeugt werden.Ja wenns funktioniert kann man etwas lernen. Das Borland Bsp.prog: Wenn Komponenten eingefügt werden in eine abgeleitete Klasse dann Actionlist verwenden . Mit Actionlist habe ich nicht Probiert kann Ursache sein habe es noch nicht genutzt wei auch nicht wie.Und nun das Borlandbeispiel auch das hilft mir wie Canvas implementiert wird. In das leere Image hatte ich ein bild geladen. Hoffentlich kommt es mit deiner hilfe zum laufen. Gruss biochip .................................................. ......................... Ab hier Borland Beispiel TCanvas.Create, GetDeviceContext, Handle, Palette (Beispiel) Mit der Methode GetFormImage können Sie ein Bitmap eines Formulars ermitteln. Die folgende Methode kann einer benutzerdefinierten, von TWinControl abgeleiteten Klasse hinzugefügt werden, um diese als Bitmap zu speichern.
Delphi-Quellcode:
type
LogPal = record lpal : TLogPalette; dummy:Array[0..255] of TPaletteEntry; end; procedure TMyControl.SaveAsBmp(fileName: TFileName); var Source: TComponent; SysPal : LogPal; tempCanvas: TCanvas; sourceRect, destRect: TRect; image2save: TImage; notUsed: HWND; begin tempCanvas := TCanvas.Create; try tempCanvas.Handle := GetDeviceContext(notUsed);//Hier kam Fehlermeldung wie bei Tshape image2save:=TImage.create(self); try with image2save do begin Height := Self.Height; Width := Self.Width; destRect := Rect(0,0,Width,Height); sourceRect := destRect; Canvas.CopyRect(destRect,tempCanvas,sourceRect); SysPal.lPal.palVersion:=$300; SysPal.lPal.palNumEntries:=256; GetSystemPaletteEntries(tempCanvas.Handle,0,256,SysPal.lpal.palPalEntry); Picture.Bitmap.Palette:= CreatePalette(Syspal.lpal); end; image2save.Picture.SaveToFile(fileName); finally image2save.Free; end; finally tempCanvas.Free; end; end; |
Re: Fehlermeldung beim canvasobject in Tshape
Wie blöd kann man eigentlich sein? Ich hab in deinem ersten Beitrag die eigentliche Frage komplett übersehen. Sorry.
Zitat:
oder du guggst mal bei ![]() |
Re: Fehlermeldung beim canvasobject in Tshape
Hi, Kann mir jemand das Borlandbeispiel(Methode mit der ein canvas implmentiert wird) mit codeschnipsel von einer Klasse ableiten das es als Demo Minimalvariante so das nur das Prinzip erkennbar ist funktioniert.
vielen Dank im voraus Gruss Frank |
Re: Fehlermeldung beim canvasobject in Tshape
Moin!
Meinst du z.B. eine einfache Komponente die eigentlich nix weiter macht als ihr Canvas zu bekritzeln? Dann schau mal ![]() MfG Muetze1 |
Re: Fehlermeldung beim canvasobject in Tshape
Hi,muetze1
Sehr vielen Dank für diese Komponente.Habe sie als object getestet also noch nicht in Palette aufgenommen. Ich habe Probleme damit vieleicht kannst du mir Tipps geben. 1. Wie kann ich in Textout nummerischen String eingeben z.B mit IntTostr geht nicht da direkt von TCosttomControl abgeleitet oder?
Delphi-Quellcode:
Procedure TColorPanel.Paint; begin ......................... canvas.textout(.., .., Nummerischen String);//mit IntTostr geht nicht canvas.textout( , ,char(ord(tag +48)); //mit char geht das kann schon der Compiler 2. Kan man Komponente ergänzen das Objecte zueinander Transparent sind .Object zu Form Transparent; So das z.B 2 verschiedene Dreieckeobjecte so zusammen kommen können das der Transparente Teil nicht das andere Dreiecks Objekt voll verdeckt .So wie es bei Image.canvas objecten geht. Also in Punkt 1.u. 2. nur object Zugriff keine Komponentenpalette. 3. Nach aufnahme in Palette kann man dann auch auf den Canvas krizel(durch die Propertys )? Vielen Dank im voaus Gruss Biochip |
Re: Fehlermeldung beim canvasobject in Tshape
Erstell bitte für neue Fragen neue Threads.
Und btw. Warum sollte IntToStr nicht gehen, um einen Integer in einen String zur Ausgabe umzuwandeln? :roll:
Delphi-Quellcode:
const
Number = 123456; begin Canvas.TextOut(10, 10, IntToStr(Number)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz