Also ich habe es letztendlich Quick&Dirty so gelöst:
Delphi-Quellcode:
procedure TAdvancedCheckbox.WMPaint(var Message: TWMPaint);
var
Canvas :TCanvas;
oldColor :TColor;
oldStyle :TBrushStyle;
begin
inherited;
if(Visible) then begin
Canvas:=TCanvas.Create();
Canvas.Handle := GetWindowDC(Self.Handle);
// canvas.TextOut(15,0, '88');
// canvas.Ellipse(x1, y1, x1+x2, y1+y2);
oldColor:=Canvas.Brush.Color;
if(isAusgewaehlt) then begin
if(isUebernommen) then begin
Canvas.Brush.Color:=farbeUebernommen;
end else begin
Canvas.Brush.Color:=farbeNichtUebernommen;
end;
end else begin
Canvas.Brush.Color:=farbeNichtAusgewaehlt;
end;
oldStyle:=Canvas.Brush.Style;
Canvas.Brush.Style:=bsSolid;
canvas.Ellipse(15, 1, 30, 16);
canvas.Brush.Style:=oldStyle;
canvas.Brush.Color:=oldColor;
FreeAndNil(Canvas);
end;
end;
dazu ist das Form auf dem das ganze Zeug liegt DoubleBuffered:=true; ich konnte bei mir kein geflackere feststellen.
Am Anfang hatte ich das inherited nicht drinne. Da hatte ich extremes geflackere da dann Windows ein ständiges neuzeichnen veranlasst hat.