Du musst Paint überschreiben und dabei die Hintergrundfarbe berücksichtigen. In SetColor musst du außer dem Setzen von FColor eigentlich nur ein Invalidate aufrufen.
Delphi-Quellcode:
type
TMyControl = class(TGraphicControl)
protected
procecdure Paint; override;
end;
procedure TMyControl.Paint;
begin
with Canvas do begin
Brush.Color := FColor;
Pen.Color := FColor;
Pen.Width := 1;
Rectangle(0, 0, Width, Height);
end;
end;
procedure TMyControl.SetColor(const Value: TColor);
begin
FColor := Value;
Invalidate;
end;