AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Farbe von TCheckbox nicht änderbar

Ein Thema von Shark99 · begonnen am 24. Feb 2017 · letzter Beitrag vom 24. Feb 2017
Antwort Antwort
Shark99

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

Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 01:11
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.

Geändert von Shark99 (24. Feb 2017 um 01:24 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 05:55
Für die Checkbox ist WM_CTLCOLORSTATIC zuständig.
Dort den BkMode setzen

Beispiel:
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;
Zusätzlich kannst du noch die GWL_EXSTYLE ergänzen mit dem Flag WS_EX_TRANSPARENT
Ansonsten ohne kann ich nicht mehr sagen.


gruss

Geändert von EWeiss (24. Feb 2017 um 06:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 06:30
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 07:02
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
Ist im Grunde genommen fast das gleiche wie ich gepostet habe abgesehen von Doublebuffer.
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 diesen Beitrag

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 08:19
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 09:21
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.
Mir ist nur Aufgefallen das die Funktionen die du verwendest im Grunde gleich sind.
Es ist natürlich möglich das in der VCL ohne Hook der Status nicht gehalten werden kann.

Aber sei's drum.

gruss
  Mit Zitat antworten Zitat
Shark99

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

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 15: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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Farbe von TCheckbox nicht änderbar

  Alt 24. Feb 2017, 17:15
Den VCLFixpack hatte ich schon im Projekt drin und zwar in der Version 1.4. Habe auch deine Version 1.2 versucht. Keine Auswirkungen.
Dann wäre ein kleines Beispiel gut zum Nachvollziehen. Bei mir funktioniert die Unit mit Delphi 7.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz