![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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