Wieso leitest Du denn von TForm ab? Und weshalb ein Boolean für 3 mögliche Zustände? Ich würde das etwa so angehen (ungetestet, da im Editor getippt):
Delphi-Quellcode:
type
(* Mögliche Stati *)
TLEDState = (lsOff, lsActive, lsInactive);
TLED = class(TGraphicControl)
private
FState: TLEDState;
procedure SetState(const Value: TLEDState);
protected
procedure Paint; override;
published
property State: TLEDState read FState write SetState;
end;
procedure TLED.Paint;
var
LEDColor: TColor;
begin
inherited;
case FState of
lsActive:
LEDColor := clGreen;
lsInactive:
LEDColor := clRed;
else
LEDColor := clGray;
end;
Canvas.Brush.Color := LEDColor;
Canvas.Ellipse(0, 0, Width, Height);
end;
procedure TLED.SetState(const Value: TLEDState);
begin
if FState <> Value then
begin
FState := Value;
invalidate;
end;
end;
P.S.: Benutze doch bitte künftig die Delphi-Tags (die "Helm"-Schaltfläche im Beitragseditor), dann ist der Code viel besser zu lesen.