Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komponente mit TPaintBox: kann nicht mit Canvas zeichenen (https://www.delphipraxis.net/106706-komponente-mit-tpaintbox-kann-nicht-mit-canvas-zeichenen.html)

edmu 16. Jan 2008 11:16

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
nun ja, ich mache es so:

FPen := Value;

mfg edmu

DeddyH 16. Jan 2008 11:23

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
Nimm besser Assign (auch für die Zuweisung von FPen zu Canvas.Pen).

edmu 16. Jan 2008 12:20

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
wenn ich jetzt etwas im objektinspektor ändere, dann
möchte ich eine showmessage ausgeben. dieses funktioniert
aber leider nicht und deshalb werden die farben auch
nicht übernommen.

Delphi-Quellcode:
FPen          : TPen;  
property Pen : TPen read FPen write SetPen;
Delphi-Quellcode:
procedure TPfeil.SetPen(Value: TPen);
begin
  //if Value <> FPen then begin
    showmessage('pen');  FUNKIONIERT NICHT
    FPen.Assign(Value);
    self.Repaint;
  //end;
end;

sirius 16. Jan 2008 12:28

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
Hmm, kompliziert.
Also der OI ruft nicht das writeProperty sondern das Read-Property auf. Er verändert ja nicht das Objekt selber, sondern liest das Objekt aus und ändert etwas in dem Objekt (das sind dann aber Propertys von TPen), deswegen wird nur Read verwendet.

Muetze1 16. Jan 2008 12:34

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
Zitat:

Zitat von DeddyH
Nimm besser Assign (auch für die Zuweisung von FPen zu Canvas.Pen).

Da ist genauso ein Setter hinter und der ruft Assign() auf

Zitat:

Zitat von sirius
Hmm, kompliziert.

Nö - nutze das OnChange Ereignis.

@edmu: Du rufst RePaint auf im Setter. Schau dir bitte meinen ersten Beitrag nochmal an und beachte Punkt 4.

sirius 16. Jan 2008 12:41

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von sirius
Hmm, kompliziert.

Nö - nutze das OnChange Ereignis.

Das bezog sich auf die Erklärung, warum er nicht in SetPen landet, wenn er im OI die Farbe des Stiftes ändert :zwinker:
(Und ich denke das Showmessage, war nur zur Kontrolle)

edmu 16. Jan 2008 12:42

Re: Komponente mit TPaintBox: kann nicht mit Canvas zeichene
 
habe es herausbekommen.
steht alles in der delphi-hilfe, siehe
"Eigenschaften untergeordneter Klassen setzen".
Komponentenentwicklung.


Delphi-Quellcode:
constructor TPfeil.Create(AOwner : TComponent);
var i : integer;
begin
  inherited Create(AOwner); { Diesen Schritt IMMER zuerst! }

  FPen := TPen.Create;    { Stift erzeugen }
  FPen.OnChange := StyleChanged; { Dem OnChange-Ereignis die Methode zuweisen }
  FBrush := TBrush.Create; { Pinsel erzeugen }
  FBrush.OnChange := StyleChanged; { Dem OnChange-Ereignis die Methode zuweisen }

end;

Delphi-Quellcode:
  published
    { Published-Deklarationen = Im Objektinspector sichtbar, Designmodus }
    ...
    procedure StyleChanged(Sender: TObject);
Delphi-Quellcode:
procedure TPfeil.StyleChanged(Sender: TObject);
begin
  Invalidate; { Komponente löschen und neu zeichnen }
  //Die Komponente zeichnet sich nun nach jeder Änderung an einer
  //der Eigenschaften Pen oder Brush neu.
end;

schönen dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
Seite 2 von 2     12   

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