Einzelnen Beitrag anzeigen

Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#7

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 14:35
Danke für die Antworten!

Ich hatte vergessen zu sagen dass die Form DoubleBuffered = True hat. Ohne Doublebuffered verschwindet das Problem erstmals, aber es kommt zu anderen Problemen. Auf den Child Fenster wird der Hintergrund der Checkboxen weiß statt transparent, beim Drücken von ALT verschwinden sogar die Checkboxen für eine Weile komplett (sehr nervig!).

Dazu sind die Checkboxen noch auf einem TTntTabsheet.

Delphi-Quellcode:
    WM_CTLCOLORSTATIC:
      begin
        SkinEngine.SplitColorARGB(SkinEngine.SK_INACTIVECAPTION, Alpha, Red, Green, Blue);
        Color := RGB(Red, Green, Blue);

        SetBkMode(wp, TRANSPARENT);
        SetTextColor(wp, Color);
        Result := GetStockObject(NULL_BRUSH);
        Exit;
      end;
Ist Leider kein Delphi 7 Code. Ich hab ihn etwas abgewandelt und eine neue Klasse erzeugt.
Delphi-Quellcode:
public
  procedure CNCtlColorStatic(var Message: TWMCtlColorStatic); message WM_CTLCOLORSTATIC;
...
procedure TTestCheckBox.CNCtlColorStatic(var Message: TWMCtlColorStatic);
begin
  SetBkMode(Message.ChildDC, TRANSPARENT);
  SetTextColor(Message.ChildDC, ColorToRGB(clRed));
  SetBKColor(Message.ChildDC, ColorToRGB(clYellow));
  Message.Result := GetStockObject(NULL_BRUSH);
end;
Hat jedoch keinerlei Auswirkungen (wird aber ausgeführt! Hab breakpoint gesetzt).

Das Problem lässt sich leicht reproduzieren, wenn man DoubleBuffered auf True setzt. Hier habe ich einen Fix dafür gepostet (unten als Antwort, falls der Browser da nicht hinspringt):
http://www.delphipraxis.net/124481-v...ojekte.html#26
Den VCLFixpack hatte ich schon im Projekt drin und zwar in der Version 1.4. Habe auch deine Version 1.2 versucht. Keine Auswirkungen.

Habe aber nun eine Lösung gefunden!

Wenn man auf den TTntTabsheet (oder TTabsheet der auch das Problem hat) einen TPanel legt (mit ParentBackground False) und erst darauf die TTntCheckboxen (oder TCheckboxen, Problem ist gleich) sind sie danach nicht mehr schwarz, sondern transparent und zwar auch mit DoubleBuffered True!
  Mit Zitat antworten Zitat