Umgang mit den SystemColors

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Umgang mit den SystemColors

Beitrag von wennerer »

Hallo zusammen,
das Thema beschäftigt mich eigentlich schon länger, aber durch diesen Beitrag viewtopic.php?f=5&t=13498 bin ich aktuell mal wieder am herum testen.
Ich ging mal von folgendem aus:
-Wenn ich in einem eigenen Project alle Farbwerte von Standard-Komponenten auf clDefault lasse sollten sich die Farben dem Thema des Betriebssystems anpassen.
-Wenn ich in einer eigenen Komponente alle Farbwerte mit einer Systemfarbe belege sollte sich die Farbe beim Umstellen auf ein anderes Theme ändern. Ich muss also nur die richtige Systemfarbe in meiner Komponente zuweisen.
Um das zu testen (und die richtigen Farben zu finden) habe ich mir ein kleines Programm geschrieben das mir alle Systemfarben und den zugehörigen RBG-Wert ausgibt. Dieses habe ich auf Linux Mint und Win10 getestet. Ich hänge mal mein Ergebnis hier an und muss feststellen ich habe die richtige Vorgehensweise wohl absolut nicht verstanden.

Eine Testform unter Linux Mint Y (einige RGB-Werte finde ich in den Systemfarben nicht wieder):
TestForm.png
TestForm.png (16.16 KiB) 394 mal betrachtet
Sytemfarben Linux Mint Y:
Mint_Y.png
Mint_Y.png (52.36 KiB) 394 mal betrachtet
Systemfarben Linux Mint Y Dark (hier verändern sich Farben zu Dark):
Mint_y_Dark.png
Mint_y_Dark.png (54.77 KiB) 394 mal betrachtet
Systemfarben Win10 hell:
nativeWin10_hell.png
nativeWin10_hell.png (24.68 KiB) 394 mal betrachtet
Systemfarben Win10 dunkel (keine Änderung zu hell? Stell ich das in Win10 falsch um?):
nativeWin10_hell.png
nativeWin10_hell.png (24.68 KiB) 394 mal betrachtet
Außer dem Wiki-Artikel https://wiki.freepascal.org/Colors/de habe ich leider nichts gefunden was mich weiter bringt. Kann mich da jemand aufklären!

Im Anhang noch mein Testprogramm.
Viele Grüße
Bernd
Dateianhänge
project1.zip
(126.82 KiB) 20-mal heruntergeladen

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Umgang mit den SystemColors

Beitrag von wp_xyz »

Ein schönes Programm, wollte ich mir schon immer mal machen...

Tja, Farben sind bei Lazarus nicht ganz einfach, weil in der LCL vieles vom Widgetset gezeichnet wird, also vom Betriebssystem. Die Farbeinstellung ist im Objektinspektor zwar vorhanden, der Wert wird aber ignoriert - das sorgt für viel Verwirrung. Früher, zu Zeiten des Windows 95-Stils war das noch einfacher, da konnte man vieles noch selbst einstellen, und weil Delphi aus dieser Zeit stammt, haben wir sie auch.

Es gibt im Objektinspektor die etwas unübersichtliche Lasche "Bedingte Eigenschaften" - dort sind die Properties aufgeführt, die nicht von allen Widgetsets unterstützt werden.

Die Farbe clDefault ist besonders kompliziert, denn je nach Umfeld wird sie anders interpretiert. TControl stellt eine Routine function GetDefaultColor(const DefaultColorType: TDefaultColorType): TColor zur Verfügung, in der festgelegt wird, welche Standard-Farbe für jeden TDefaultColorType=(dctBrush, dctFont) zu nehmen ist.

Nach Möglichkeit bleibe bei den Farbpaaren wie clWindow/clWindowText, clHighlight/clHighlightText usw. Fest eincodierte RGB-Farben machen dir mit Sicherheit Probleme, wenn jemand anders das Programm benutzt. Denn was auf deinem Bildschirm im Dark-Mode toll aussieht, ist auf dem anderen im Normalmodus kaum zu erkennen. Ich bin da schon oft drauf reingefallen.

wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Umgang mit den SystemColors

Beitrag von wennerer »

Hallo,
@ wp_xyz:
Herzlichen Dank für deine ausführliche Antwort. Da bin ich wohl mal wieder etwas blauäugig an die Sache ran gegangen.

Ich dachte eigentlich das es unter Windows ähnlich wie unter Mint funktioniert. Theme einstellen und (fast) alles passt sich an. In Win10 gibt es zwar sogenannte Akzentfarben mit denen sich die Menüfarbe beeinflussen lässt (funktioniert auch in Lazarus) aber die Einstellung Hell und Dunkel wird von Lazarus-Programmen nicht erkannt.
Zwischenzeitlich bin ich auch noch auf einen Beitrag im internationalen Forum gestoßen.
https://forum.lazarus.freepascal.org/in ... ic=42810.0
Wenn ich das richtig verstehe schaut man dort in der Windows-Registry nach was eingestellt ist und passt dann die Farben selber an? Gibt es keine Möglichkeit das Systemfarben wie clForm oder clWindow reagieren?
Ich habe auch einiges über Manifest Dateien gelesen und nicht wirklich verstanden.
Würde mich freuen wenn mir einer der Profis hier erklären könnte wie für Windows die richtige Vorgehensweise wäre.
Viele Grüße
Bernd

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Umgang mit den SystemColors

Beitrag von wp_xyz »

Meiner Meinung nach ist der Dark-Mode in Windows nicht vollständig implementiert, er funktioniert nur für die Metro-Style Apps. Bis auf den Explorer kriegen normale Windows-Anwendungen (auch von Microsoft) das nicht mit. Ich will dem aber auch nachgehen, weil mich persönlich der Dark-Mode nicht interessiert.

wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Umgang mit den SystemColors

Beitrag von wennerer »

Hab es nochmal getestet. Ja du hast recht. Alle anderen Programme bleiben auch hell! Hab es natürlich vorhin ausgerechnet mit den Browser getestet und da ich nicht sehr viel mit Windows mache und dann auch keinen Dark-Mode verwende war mir das nicht klar.
Nochmal Danke!
Bernd

Antworten