![]() |
Farbe von TCheckbox nicht änderbar
Ich bin dabei ein Projekt welches unter WinXP und Delphi 5 entwickelt wurde auf Delphi 7 und Windows 7+ umzuschreiben (es geht keine neuere Delphi Version, zu viele Altlasten).
Beim Laden in Delphi 7 wird in Designmode alles richtig angezeigt. Im Runmode sind allerdings einige Komponenten einfach nur schwarz. Ich habe zu dem Problem gegoogelt. Es liegt an dem XP Manifest und Delphi 7. Für TPanel habe ich eine Lösung gefunden! Bei dem Parentbackground Property im Object Inspector habe ich den Wert von False auf True und dann wieder auf False gesetzt. Das hat geholfen, die Panels sind nicht mehr schwarz, sondern nehmen die Farbe von Panel.Color an. So weit so gut. Die TCheckbox Instanzen sind jedoch auch in Runtime alle schwarz, es gibt aber gar kein Parentbackground Property! Wie komme ich hier weiter? Danke im Voraus. |
AW: Farbe von TCheckbox nicht änderbar
Für die Checkbox ist WM_CTLCOLORSTATIC zuständig.
Dort den BkMode setzen Beispiel:
Delphi-Quellcode:
Zusätzlich kannst du noch die GWL_EXSTYLE ergänzen mit dem Flag WS_EX_TRANSPARENT
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; Ansonsten ohne :glaskugel: kann ich nicht mehr sagen. gruss |
AW: Farbe von TCheckbox nicht änderbar
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):
![]() |
AW: Farbe von TCheckbox nicht änderbar
Zitat:
Aber dafür solange es sich nur um die Checkbox handelt einen Hook in Anspruch zu nehmen ? OK muss jeder für sich entscheiden. bezogen auf ![]() gruss |
AW: Farbe von TCheckbox nicht änderbar
Mit deiner Variante trat das Problem bei mir aber immer noch auf.
Ich hatte es vorhin aber nur kurz getestet, ich kann nicht ausschließen, dass ich etwas übersehen habe. Ich probiere es nachher noch einmal aus, wenn ich mehr Zeit dafür habe. |
AW: Farbe von TCheckbox nicht änderbar
Zitat:
Es ist natürlich möglich das in der VCL ohne Hook der Status nicht gehalten werden kann. Aber sei's drum. gruss |
AW: Farbe von TCheckbox nicht änderbar
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. Zitat:
Delphi-Quellcode:
Hat jedoch keinerlei Auswirkungen (wird aber ausgeführt! Hab breakpoint gesetzt).
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; Zitat:
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! |
AW: Farbe von TCheckbox nicht änderbar
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz