![]() |
Re: komponeten eigenschaften
Sorry, ersetze Nummer mal mit Art...
...:cat:... |
Re: komponeten eigenschaften
Du musst den neuen Wert der privaten Feld-Variable zuweisen und nicht wieder dem property selbst, sonst kommst du in eine Endlosschleife, da sich die Set-Methode indirekt immer wieder selbst aufruft!
Delphi-Quellcode:
procedure TTest.SetArt(Value: TArt);
begin if Value <> Nummer then begin // ÄNDERUNG FNummer := Value; end; end; |
Re: komponeten eigenschaften
im oi wird das was man ausgewählz hat nicht gespeichert sondern einfach wieder zurückgesetzt
|
Re: komponeten eigenschaften
Moin Christoph,
ändere das mal wie folgt ab:
Delphi-Quellcode:
Wenn die Property (nummer) mit Value gefüllt wird, wird automatisch die Methode SetArt wieder aufgerufen, und zwar endlos. Die Eigenschaft nummer ist ja nur ein Platzhalter für das interne Feld Art, und kann selber keinen Wert aufnehmen.
procedure TTest.SetArt(Value: TArt);
begin if Value <> Art then begin // ÄNDERUNG Art := Value; end; end; BTW: Um sich auch in fremden Sourcen zurechtzufinden, bzw. eigenen Sourcen für andere lesbarer zu gestalten, wäre es sinnvoll die Benennungskonventionen einzuhalten. Das soll in diesem Falle heissen: Interne Felder sollten immer mit einem F beginnen. Dann sieht man auch innerhalb der Komponente leichter auf was man zugreift. |
Re: komponeten eigenschaften
hier mal das so wie ich es machen will:
ich möchte innerhalb des labels ein dreieck zeichnen. zur auswahl unten rechts und links und oben rechts und links.
Delphi-Quellcode:
unit Test;
interface uses Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Graphics, StdCtrls; type TArt = (TaDreieckUl, TaDreieckUr, TaDreieckOl, TaDreieckOr); type TTest = class(TLabel) private { Private declarations } FArt : TArt; procedure SetArt(Value : TArt); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } property Aussehen : TArt read FArt write SetArt; end; procedure Register; implementation constructor TTest.Create(AOwner : TComponent); begin inherited Create(AOwner); end; procedure TTest.SetArt(Value: TArt); begin if Value <> Aussehen then begin if (Aussehen = TaDreieckUl) or (Aussehen = TaDreieckOr) then begin canvas.Brush.Color := clblack; canvas.MoveTo(0,0); canvas.LineTo(width,height); if Aussehen = TaDreieckUl then canvas.FloodFill(1,10,clblack,fsborder) else canvas.FloodFill(10,1,clblack,fsborder) end else begin canvas.Brush.Color := clblack; canvas.MoveTo(width,height); canvas.LineTo(0,height); if Aussehen = TaDreieckOl then canvas.FloodFill(1,10,clblack,fsborder) else canvas.FloodFill(10,1,clblack,fsborder) end; Aussehen := Value; end; end; procedure Register; begin RegisterComponents('Samples', [TTest]); end; end. |
Re: komponeten eigenschaften
Code:
...:cat:...
...
type TTest = class(TLabel) private { Private declarations } FArt : TArt; procedure SetArt(Value : TArt); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } property Aussehen : TArt read FArt write SetArt; end; ... procedure TTest.SetArt(Value: TArt); begin if Value <> Aussehen then begin .... [color=#ff0000]FArt[/color] := Value; end; end; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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