Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Dark Theme aber nur die Farben (https://www.delphipraxis.net/209358-dark-theme-aber-nur-die-farben.html)

Sherlock 2. Nov 2023 14:36

AW: Dark Theme aber nur die Farben
 
Das scheint noch schlimmer zu sein, als ich dachte:
Hier https://www.codedotshow.com/blog/cod...the-dark-side/ beschreibt Ian Branch nochmal wie das mit der Theme Umschaltung funktioniert. Damals hatte schon einer gefragt, wie das denn ohne Themes ginge. Die Antwort lässt hinreichende Komplexität vermuten:
Zitat:

Zitat von Ian Branch
Hi Alexandre – how you apply the style depends on whether or not the component is one which ‘understands’ styles and if it is FMX or VCL.

In most cases if you include the correct unit in your uses clause you can then call the TStyleManager to get the actual values for system colors and then use them to apply colors to the appropriate properties of any component which doesn’t support styles. If the component does support styles then you can create custom style elements and apply that element to the control.

To do things manually – If you are using VCL then in your uses clause make sure you have Vcl.Themes – for FireMonkey FMX make sure to include FMX.Styles instead (it is probably there already).

Now, somewhere in your formcreate code or similar have a routine like this:

AColor: TColor; // For VCL

or

AColor: TAlphaColor; // for FMX

Now you can do this:

AColor := TStyleManager.ActiveStyle.GetSystemColor(clBtnFace );

or

AColor := := TStyleManager.ActiveStyle.GetSystemColor(clHighlig ht);

etc etc – for any of the system colors.

Then you can use the AColor variable to assign a value to any of the component’s colors.

Das klappt so nicht bzw. hat keine sichtbare Wirkung. Hab das im FormCreate und in ApplicationEventsSettingChange.
Erst hier sieht man, das mehr dahinter steckt.
Zitat:

Zitat von Ian Branch
You can see an example of this in the VCL – if you open VCL.Grids and navigate to the DrawCellBackground method you will see how they obtain and use the correct system colors, adjusted for the style.

Da steckt unglaublich viel Arbeit drin, die wirklich die VCL schon von Haus aus können sollte. Ein StringGrid reagiert trotzdem nicht auf hell dunkel Umschaltung.

Rolf Frei 2. Nov 2023 15:31

AW: Dark Theme aber nur die Farben
 
Das Problem mit den Farben in Delphi Styles ist, dass viele Themes diese nicht richtig unzterstützen und Farbwerte liefern, die überhaupt nicht zum eigentlich Theme passen. Die Farbewerte auch entsprechend dem Theme zu setzen, scheint da irgendwie bei der Entwicklung einer Theme immer wieder vergessen zu werden. Das ist einfach alles sehr schluderig und unprofessionell umgesetzt!!!

Uwe Raabe 2. Nov 2023 15:46

AW: Dark Theme aber nur die Farben
 
Der aktuelle Stand in der VCL basiert auf den Systemfarben wie z.B.
Delphi-Quellcode:
clBtnFace
. Weist man der
Delphi-Quellcode:
Brush.Color
diesen Wert zu, dann verwendet Windows die entsprechende Systemfarbe. Dummerweise schert es sich dabei nicht um die Einstellung Light oder Dark. Das gilt zumindest für die von Delphi erzeugten Programme. Die von Microsoft als Apps bezeichneten Programme reagieren allerdings sehr wohl auf diese Einstellung. Windows sieht es offenbar nicht vor, dass Win32-Applikationen automatisch die eingestellten Systemfarben verwenden. Mir ist auch keine (dokumentierte) API bekannt, mit der man sowas einschalten könnte.

Es ist also, wie bereits oben erwähnt wurde, erstmal nicht so einfach überhaupt an die Farben ranzukommen, geschweige denn diese auch zu verwenden. Das kennt jeder der schon mal versucht hat die Farbe eines TButton zu ändern. Aber eben dafür gibt es ja die VCL Styles.

Wenn also jemand die notwendigen Informationen hat, wie man Windows dazu bringt, die entsprechenden Farben auch in Win32-Applikationen zu verwenden, wäre hier und jetzt der geeignete Zeitpunkt dieses Wissen beizutragen.

CodeX 2. Nov 2023 16:07

AW: Dark Theme aber nur die Farben
 
Vielleicht verstehe ich dich falsch, aber bei mir haben sich normale Windows Anwendungen wie Firefox, Chrome, LibreOffice oder RustDesk automatisch auf eine dunkle UI umgeschaltet. Das ist alles OSS und man könnte dort nachsehen, wie die das machen.

Uwe Raabe 2. Nov 2023 16:43

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von CodeX (Beitrag 1528904)
Das ist alles OSS und man könnte dort nachsehen, wie die das machen.

Meldest du dich dann wenn du es herausgefunden hast?

CodeX 2. Nov 2023 19:19

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1528907)
Zitat:

Zitat von CodeX (Beitrag 1528904)
Das ist alles OSS und man könnte dort nachsehen, wie die das machen.

Meldest du dich dann wenn du es herausgefunden hast?

Ist das jetzt ernst gemeint? Findest du nicht, dass das Aufgabe von Embarcadero sein sollte?
Ich habe dir lediglich auf deine Aussage geantwortet, dass das bei normalen Windows-Anwendungen eventuell gar nicht ginge und bestätigt dass es geht und wo die Entwickler im Zweifelsfall nachsehen können, wenn sie es anders nicht wissen.

Uwe Raabe 2. Nov 2023 21:11

Zitat:

Zitat von CodeX (Beitrag 1528914)
Findest du nicht, dass das Aufgabe von Embarcadero sein sollte?

Ich denke, bei Embarcadero ist das eine Frage der Priorität, die auch anhand des zu erwartenden Aufwands und Nutzen bewertet wird. Dazu gibt es in dem oben verlinkten Artikel immerhin einen Workaround. Wenn ich mir die Liste der offenen Bugs und Feature-Requests in QP ansehe, wird dieses Feature vermutlich nicht so bald in den Top-Ten landen. Wenn es dann wenigstens noch eine offizielle Dokumentation seitens MS gäbe, würde das sicher helfen. Eher als sich die Implementierung in einer anderen Anwendung zu eigen machen zu müssen.

Nebenbei: Gibt es dafür eigentlich schon einen entsprechenden Feature-Request?

mytbo 2. Nov 2023 22:25

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1528920)
Wenn es dann wenigstens noch eine offizielle Dokumentation seitens MS gäbe, würde das sicher helfen. Eher als sich die Implementierung in einer anderen Anwendung zu eigen machen zu müssen.

Eine allgemeine Beschreibung bei Ionos. Bei Searchfox: Wenn ich richtig geschaut habe, wird hier AppsUseLightTheme ausgelesen.

Bis bald...
Thomas

Uwe Raabe 2. Nov 2023 22:38

AW: Dark Theme aber nur die Farben
 
Ich habe bei MS dies gefunden (Support Dark and Light themes in Win32 apps):
Zitat:

There are many approaches to implementing Dark mode support in an application. Some apps contain two sets of UIs (one with a light color and one with a dark color). Some Windows UI frameworks, such as WinUI 3, automatically detect a system's theme and adjust the UI to follow the system theme.
Das deckt sich mit meinen bisherigen Erkenntnissen, dass das Zeichnen der Controls im Dark-Mode von der Anwendung selbst übernommen werden muss, wenn es kein Framework wie WinUI 3 verwendet. Will man kein weiteres System zum Zeichnen der VCL-Controls entwerfen, bieten sich eigentlich nur die VCL-Styles an.

Was ich mir da als Feature-Request vorstellen kann wäre eine Erweiterung von TUxThemeStyle, die das jeweils aktuelle Colorset ermittelt (z.B. unter Verwendung des ImmsersiveColors Codes vom Mahdi Safsafi). Es ist zwar immer noch eine enorme Fleißarbeit das Mapping der cl-Systemfarben auf den passenden Immersive-Index zu erstellen, aber nicht wirklich schwierig. Die Darstellung wäre dann ja bereits mit der Styles-Implementierung vorhanden.

Uwe Raabe 2. Nov 2023 22:51

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von mytbo (Beitrag 1528924)
Wenn ich richtig geschaut habe, wird hier AppsUseLightTheme ausgelesen.

Das Erkennen von Light oder Dark war nie das Problem. Das ist in ImmersiveColors ebenso gelöst wie in dem Code von Ian Barker. Ian beschreibt in seinem Artikel ja auch, wie man auf die Änderung zur Laufzeit reagieren kann.

Nirgendwo wird allerdings beschrieben, wie man Windows dazu bringen kann bei den Common Controls diesen Dark Mode auch zu verwenden. Die Beschreibung von MS ist aber ein starker Hinweis darauf dass das gar nicht geht. Insofern ist die von Ian vorgestellte Lösung momentan vermutlich die einzig funktionierende.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Seite 2 von 3     12 3      

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