Die Farbe des Controls ändern


Eine beliebte Frage in diversen Foren ist: Wie kann ich die Farbe der Fortschrittsanzeige ändern? Der Objektinspektor von Delphi enthält bisher keine Möglichkeit, diesen Wunsch zu erfüllen. Dafür bietet das API aber die beiden Nachrichten "PBM_SETBARCOLOR" und "PBM_SETBKCOLOR".
Diese Nachrichten erwarten im lparam den neuen Farbwert, den man am einfachsten als RGB-Wert übergeben kann. Für ein dunkles Rot als Balken ist so z.B. diese Anweisung erforderlich:

SendMessage(hwndProgress,PBM_SETBARCOLOR,0,RGB($90,0,0));

Und einen schwarzen Hintergrund erhält man mit der Zeile:

SendMessage(hwndProgress,PBM_SETBKCOLOR,0,RGB(0,0,0));

Im Beispielprogramm wird dies mit Hilfe des Compilerschalter CHANGECOLOR demonstriert.


Hinweise

Bei der VCL kann, dem ersten Anschein nach, nur die Vordergrundfarbe verändert werden. Tests mit einer anderen Hintergrundfarbe verliefen leider ergebnislos. Der o.g. Codeausriss verursacht bei API-Programmen allerdings keinerlei Probleme.

Außerdem sind solche "Farbenspiele" nicht in jedem Fall empfehlenswert. Der Anwender wird sicher seine eigenen Vorstellungen bezüglich der Farben seines Systems haben, und diese sollten Sie nicht ignorieren. Es macht keinen besonders guten Eindruck, wenn sich Ihr Programm über die Einstellungen des Anwenders hinwegsetzt und eigene Farben nutzt, die u.U. im Gegensatz zu denen stehen, die der Anwender bevorzugt.