AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dark Theme aber nur die Farben

Ein Thema von Phoner · begonnen am 26. Nov 2021 · letzter Beitrag vom 3. Nov 2023
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 14:36
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 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 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.
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 15:31
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!!!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#13

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 15:46
Der aktuelle Stand in der VCL basiert auf den Systemfarben wie z.B. clBtnFace . Weist man der 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#14

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 16:07
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.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#15

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 16:43
Das ist alles OSS und man könnte dort nachsehen, wie die das machen.
Meldest du dich dann wenn du es herausgefunden hast?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#16

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 19:19
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.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#17
  Alt 2. Nov 2023, 21:11
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#18

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 22:25
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#19

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 22:38
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
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#20

AW: Dark Theme aber nur die Farben

  Alt 2. Nov 2023, 22:51
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:21 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