Width und Height sind > 0? Ich habe meinen eigenen Code mal ausprobiert, nach einer kleinen Erweiterung (Überschreiben des Konstruktors) tut das wie gedacht:
Delphi-Quellcode:
unit uLED;
interface
uses
SysUtils, Classes, Controls, Graphics;
type
(* Mögliche Stati *)
TLEDState = (lsOff, lsActive, lsInactive);
TLED =
class(TGraphicControl)
private
{ Private-Deklarationen }
FState: TLEDState;
procedure SetState(
const Value: TLEDState);
protected
{ Protected-Deklarationen }
procedure Paint;
override;
public
{ Public-Deklarationen }
constructor Create(AOwner: TComponent);
override;
published
{ Published-Deklarationen }
property State: TLEDState
read FState
write SetState;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Samples', [TLED]);
end;
{ TLED }
constructor TLED.Create(AOwner: TComponent);
begin
inherited;
Width := 16;
Height := 16;
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, ClientWidth, ClientHeight );
end;
procedure TLED.SetState(
const Value: TLEDState);
begin
if FState <> Value
then
begin
FState := Value;
invalidate;
end;
end;
end.
[edit] Einen Schönheitspreis gewinnt das natürlich nicht, aber man kann ja auch hübscher zeichen. Hier ging es ja nur um das Prinzip. [/edit]