![]() |
AW: Neue Komponente entwickeln
nein im Code ist er auch nicht verfügbar..
Ich möchte einfach nur die Farbe von der aus TGraphicControl abgeleiteten Komponente zur Laufzeit ändern, in Abhängigkeit von einer Boolschen Variablen. Genau genommen nicht die ganze Komponente sondern nur zwei "Kreise" darin, etwas weiter oben sieht man das Teil im Anhang. So nach dem Motto: if true then farbe = rot, if false then farbe = weiss |
AW: Neue Komponente entwickeln
Das würde ich nicht so machen, sondern im Setter der Property ein Refresh/Repaint/Invalidate aufrufen. Innerhalb der Zeichenroutine wird dann der entsprechende Teil gemäß des Property-Wertes eingefärbt.
|
AW: Neue Komponente entwickeln
Sorry DeddyH ,
da hatte sich jetzt was überschnitten... Das hat jetzt geklapt mit dem Canvas. Habe die property eingefügt. Danke, aber das mit dem Setter habe ich nicht verstanden. Kannst du mir das noch etwas genauer erklären, ich bin leider kein gelernter Informatiker, nur Betriebswirt :( ;-) |
AW: Neue Komponente entwickeln
Habe gerade mal ausgehend von Detlef's Beispiel im Editor was zusammengeschrieben. Sollte eigentlich funktionieren. Eventuell ist noch der ein oder andere Syntaxfehler drin, aber den bekommst Du dann denke ich aufgelöst. :)
Delphi-Quellcode:
type
TSiloZelle = class(TGraphicControl) private FIsEmpty: Boolean; protected procedure Paint; override; procedure SetIsEmpty(Value: Boolean); virtual; function GetIsEmpty: Boolean; virtual; public //... property Canvas; property IsEmpty: Boolean read GetIsEmpty write SetIsEmpty; //... end; procedure TSiloZelle.Paint; begin inherited; DoSomePaintStuff(); if IsEmpty then Canvas.Brush.Color := clRed else Canvas.Brush.Color := clGreen; DoSomeOtherPaintStuff(); end; procedure SetIsEmpty(Value: Boolean); begin FIsEmpty := Value; Self.Invalidate; end; function GetIsEmpty: Boolean; begin Result := FIsEmpty; end; |
AW: Neue Komponente entwickeln
Richtig, ich persönlich frage nur immer ab, ob sich der Wert auch tatsächlich geändert hat, damit nicht unnötig neu gezeichnet wird.
Delphi-Quellcode:
type
TMeineDingensKomponente = class(TGraphicControl) private FSomeProp: Boolean; procedure SetSomeProp(const Value: Boolean); //... public property SomeProp: Boolean read FSomeProp write SetSomeProp; //... end; //... procedure TMeineDingensKomponente.SetSomeProp(const Value: Boolean); begin if FSomeProp <> Value then begin FSomeProp := Value; Invalidate; //In der Paint-Methode dann je nach Wert zeichnen end; end; |
AW: Neue Komponente entwickeln
Zitat:
Meins war allerdings nur ein Beispiel um zu verdeutlichen was du meintest. Die zusätzlichen Optimierungen habe ich in dem Schritt noch nicht bedacht/beachtet. :wink: |
AW: Neue Komponente entwickeln
Man kann sich auch ein paar OpenSource-Projekte ansehen, z.B. das hier:
![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 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