![]() |
Canvas.draw problem
Hi
Bin an ner eigenen Komponente. (abgeleitet von TCustomControl) Will ne neue Property: Graphic... Okay so weit so gut. Zeichne ich das ausgewählte Bild (jpg,bmp..) mit Canvas.draw(0,0,FGraphic) aud die Komponente(Zu Designzeit), gibts ne Zugriffsverletzung!? Die Zugriffsverletzung kommt aber erst nach dem das Bild gedrawt wurde. Es wir also gezeichnet, leider aber eben mit mehreren Zugriffsverletzungen. Wo kommen die her? Ne noch besser wie mache ich ne property Bild ( Da kann ich easy n Bild auswählen ) und wie krieg ich dass dann auf die Canvas??? Bitte helft mir... bin im stress... :wall: Danke |
Re: Canvas.draw problem
Ohne Code kann dir keiner helfen :roll:
|
Re: Canvas.draw problem
Warum der Fehler kommt, kann man die nur sagen wenn du uns Code lieferst.[Edit wie namenlozer schon schrieb]
Für die Property brauchst du ne private Eigenschaft, einen setter und halt die Property und mußt Draw überladen. |
Re: Canvas.draw problem
Liste der Anhänge anzeigen (Anzahl: 1)
Okay.. sorry...
hier is grad die Datei.. hängt vielleicht mit was anderem zusammen. Wie ich mus Draw überladen?! könnte da der Fehler sein |
Re: Canvas.draw problem
Bei mir gehts. :)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject); begin EButton := TEButton.Create(nil); EButton.Width := 100; EButton.Height := 25; EButton.Top := 100; EButton.Left := 100; EButton.Graphic := TBitmap.Create; EButton.Graphic.LoadFromFile('bild1.bmp'); // 100x25 Pixel 24bit Bitmap EButton.Parent := Form1; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin EButton.Graphic.Free; // evtl. im destructor erledigen / Assigned() EButton.Free; end; |
Re: Canvas.draw problem
Der Inspektor sollte auch mit der Eigenschaft klarkommen, wenn du die Instanz von Graphic in der Komponente erzeugst und beim Setter der Eigenschaft darauf achtest, dass du dir die interne Instanz nicht überschreibst, sondern dass diese mit Assign() die zugewiesene Instanz inhaltlich übernimmt.
Nochmal im Detail: 1. Im Constructor alle Instanzen von TGraphic erzeugen
Delphi-Quellcode:
2. In den Setter mit Assign() arbeiten damit du deine Instanz behälst.
FGraphic := TGraphic.Create;
FGraphicOver := TGraphic.Create; FGraphicDown := TGraphic.Create;
Delphi-Quellcode:
3. Im Destruktor die Instanzen wieder freigeben
procedure TEButton.SetGraphic(const Value: TGraphic);
begin FGraphic.Assign(Value); RePaint; end; Bug! Du löscht die Region nach der Übergabe der Region an SetWindowRgn(). Ich empfehle die MSDN zu konsultieren: Zitat:
Nach weiteren Dingen habe ich nun nicht mehr geschaut... |
Re: Canvas.draw problem
:oops: ...
trotzdem, sowie ich das mache gibts beim kompilieren der Komponente folgende Warnungen:
Delphi-Quellcode:
Natürlich kann ich die Komponente dann auch nicht verwenden. Abstrakter Fehler.
[Warnung] EButton.pas(307): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.LoadFromStream' wird angelegt
[Warnung] EButton.pas(307): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.SaveToStream' wird angelegt [Warnung] EButton.pas(307): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.LoadFromClipboardFormat' wird angelegt [Warnung] EButton.pas(307): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.SaveToClipboardFormat' wird angelegt Irgendwie wird das zeuchs nicht richtig created, instanziert... was ist nun mein Problem? |
Re: Canvas.draw problem
Erstelle statt einer TGraphic-Instanz einfach eine TBitmap-Instanz. :)
s. mein Beispiel |
Re: Canvas.draw problem
...
Welche Klasse muss ich da bei uses angeben? |
Re: Canvas.draw problem
Die Unit Graphics.
Sollte aber schon standardmäßg bei einem neuen Formular drinstehen. |
Re: Canvas.draw problem
Eben...
Aber ich mach ja auch kein Formular, ich mach ne Komponente! nö ich glaub das geht so nicht... das Problem muss woanders liegen... Ich will ja auch nicht nur Bitmaps anzeigen lassen können, sondern diverse Formate... echt komisch |
Re: Canvas.draw problem
So, sorry, ich hatte nicht mehr bedacht, das TGraphic ja die abstrakte Basisklasse ist. Nutze statt einem TGraphic TPicture. Damit solltest du dann auch alle möglichen anderen Grafikformate nutzen können.
Also die Eigenschaft auf TPicture ändern und die Instanzenbildung auch entsprechend. Zitat:
|
Re: Canvas.draw problem
Supertoll vielen Dank euch allen... funktioniert top...
nach dem "update" findet ihr die Komponente immer unter diesem Link: ![]() Gruss enemyleft |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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