Delphi-PRAXiS

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)

Phoner 26. Nov 2021 09:01

Dark Theme aber nur die Farben
 
Hallo,

mir ist klar, dass ich Themes verwenden kann. Mein Problem dabei ist, dass die Elemente anders gezeichnet werden. Ich möchte die nativen Steuerelemente, aber nur in einem anderen Farbschema. Geht das überhaupt.
Im Endeffekt will ich auch gar keine speziellen Farben definieren, sondern die, welche auch im Explorer verwendet werden. Dazu gehört eben auch, dass ich keine anderen Symbole für Min/Max/Close haben möchte und auch die gleiche Fensterfarbe für aktives Fenster oder Fenster ohne Fokus.

Uwe Raabe 26. Nov 2021 10:29

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von Phoner (Beitrag 1498226)
Im Endeffekt will ich auch gar keine speziellen Farben definieren, sondern die, welche auch im Explorer verwendet werden.

Sollte das nicht schon der Fall sein, wenn du keine VCL-Styles verwendest und immer schön die Systemfarben (clBtnFace usw.) nutzt?

Phoner 26. Nov 2021 11:22

AW: Dark Theme aber nur die Farben
 
Ja, meine Anwendung sieht nativ aus, aber eben hell. Wenn ich Windows selbst auf Dark Mode stelle, ändern sich die Explorer-Fenster, aber nicht meine Applikation. Ideal wäre es, wenn man in der Applikation ein Color-Set komplett setzen könnte, welches dem Color-Set von Windows entspricht.

KodeZwerg 26. Nov 2021 13:55

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von Phoner (Beitrag 1498242)
Ja, meine Anwendung sieht nativ aus, aber eben hell. Wenn ich Windows selbst auf Dark Mode stelle, ändern sich die Explorer-Fenster, aber nicht meine Applikation. Ideal wäre es, wenn man in der Applikation ein Color-Set komplett setzen könnte, welches dem Color-Set von Windows entspricht.

kodezwergs-real-theme-beispiel <- das macht unter anderem genau das.

FriedrichAT 26. Nov 2021 22:41

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von Phoner (Beitrag 1498226)
Hallo,

Dazu gehört eben auch, dass ich keine anderen Symbole für Min/Max/Close haben möchte und auch die gleiche Fensterfarbe für aktives Fenster oder Fenster ohne Fokus.

Für die "Fensterfarbe" hab ich was...

Delphi-Quellcode:
function Get_Color: TColor;
var Frm: TForm;
    CH:TCanvas;
begin
  Frm:= TForm.Create(Application);
  CH:= TCanvas.create;
  try
    Frm.Caption:= '';
    Frm.BorderStyle:= bsToolwindow;
    Frm.SetBounds(0, 0, 80, 50);
    Frm.FormStyle:= fsStayOnTop;
    Application.ShowMainForm:= False;
    Frm.Show;
    CH.Handle:= GetWindowDC(GetDesktopWindow);
    result:= WinApi.Windows.GetPixel(CH.Handle, Frm.Left+12, Frm.Top+12);
  finally
    CH.Free;
    Frm.Free;
    Application.ShowMainForm:= True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Color:= Get_Color;
end;

Phoner 29. Nov 2021 07:55

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von KodeZwerg (Beitrag 1498257)
Zitat:

Zitat von Phoner (Beitrag 1498242)
Ja, meine Anwendung sieht nativ aus, aber eben hell. Wenn ich Windows selbst auf Dark Mode stelle, ändern sich die Explorer-Fenster, aber nicht meine Applikation. Ideal wäre es, wenn man in der Applikation ein Color-Set komplett setzen könnte, welches dem Color-Set von Windows entspricht.

kodezwergs-real-theme-beispiel <- das macht unter anderem genau das.

Vielen Dank! Ja, genau so was in der Art habe ich gesucht. Leider behalten Buttons und einige andere Elemente ihre alte Darstellung. Der Mix sieht dann unschön aus. Bis auf Weiteres verabschiede ich mich deshalb von diesem Ansatz.

CodeX 2. Nov 2023 10:11

AW: Dark Theme aber nur die Farben
 
Da dies genau meine Frage ist und ich keinen passenderen Thread gefunden habe, hole ich das hier nochmal rauf.

Gibt es denn immer noch keine Möglichkeit, dass die Delphi VCL Anwendung unter Windows 11 im nativen Dark Mode (System Einstellungen (Win+I) > Personalisieren > Farben > Modus: Dunkel) sich automatisch anpasst?
Ich verstehe schon, dass es schon länger die Möglichkeit gibt, Themes zu verwenden und diese dann gezielt umzuschalten, aber das ist ja nicht das Gleiche.

Oder übersehe ich da nur Etwas?

Uwe Raabe 2. Nov 2023 12:12

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von CodeX (Beitrag 1528874)
Gibt es denn immer noch keine Möglichkeit, dass die Delphi VCL Anwendung unter Windows 11 im nativen Dark Mode (System Einstellungen (Win+I) > Personalisieren > Farben > Modus: Dunkel) sich automatisch anpasst?

Gibt es schon, aber aktuell muss man das noch selbst einbauen: Modernize Your App: Are You Handling Windows Themes Correctly?

Sherlock 2. Nov 2023 12:59

AW: Dark Theme aber nur die Farben
 
Ok, das sind Delphi-VCL-Themes. Aber wie sieht das mit Windows-Systemfarben aus? Das weiter oben erwähnte clButtonFace. Man muss der Anwendung doch "nur" beipulen, daß sie alle Controls an die neuen Systemfarben anzupassen hat, sobald dieses Event
Delphi-Quellcode:
procedure TForm1.WMSettingChange(var Message: TWMSettingChange);
begin
  if SameText('ImmersiveColorSet', String(Message.Section)) then
    // statt HandleThemes; sollte hier entsprechend Themeless reagiert werden
end;
ausgelöst wurde.

CodeX 2. Nov 2023 13:56

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1528880)
Gibt es schon, aber aktuell muss man das noch selbst einbauen: Modernize Your App: Are You Handling Windows Themes Correctly?

Der Artikel ist ja schon 2,5 Jahre alt und baut auch nur eine Umschaltung von Themes ein. Das sollte wirklich nicht notwendig sein. Das muss nativ gehen. Nachdem ich das in Windows umgeschaltet habe, sind so gut wie alle Anwendungen automatisch dunkel geworden, bis auf meine und ein paar ältere Programme.

Gibt es da bei Embarcadero keinerlei Bestrebungen oder Ankündigungen? Ich weiß ehrlich gesagt gar nicht, ob das in Windows 10 schon möglich war, aber selbst Windows 11 ist ja schon über 2 Jahre auf dem Markt.

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.

Der schöne Günther 3. Nov 2023 07:02

AW: Dark Theme aber nur die Farben
 
Ich weiß nicht weshalb man sich da so fetzen kann. Microsofts offizielle Doku ist da doch recht eindeutig:

https://learn.microsoft.com/en-us/wi...windows-themes

Andere Oberflächen-Frameworks wie WinForms, WPF oder WinUI mögen da etwas mitbringen, aber für die Common Controls, auf denen die VCL basiert, hat sich Microsoft wohl keine Mühe mehr gemacht. Du scheinst Windows bitten zu können, den Fensterrahmen in hell oder dunkel zu zeichnen (siehe Link oben), aber den Rest musst du wohl selber machen.

Sherlock 3. Nov 2023 10:00

AW: Dark Theme aber nur die Farben
 
Ja, das ist Microsofts Variante eines "Leck mich" dafür, daß man nicht mit deren neuesten Produkten arbeitet (entwickelt). Egal...müssen wir durch. Ich hab mal bei den "Kollegen" von Lazarus gelunzt und bin auf das hier gestossen https://github.com/zamtmn/metadarkstyle. Darin gibt es eine Unit, die sich um die Basics zu kümmern scheint. Da wird jedenfalls recht detailliert die Buildnummer von Windows abgefragt und unterschiedlich reagiert: https://github.com/zamtmn/metadarkst...udarkstyle.pas. In dieser Unit https://github.com/zamtmn/metadarkst...getsetdark.pas schließlich werden die einzelnen Controls "umgefärbt".

Das ist wirklich Fleißarbeit.

Uwe Raabe 3. Nov 2023 11:00

AW: Dark Theme aber nur die Farben
 
Ich habe jetzt einfach mal einen Feature-Request dafür angelegt: RSP-42542: Extend TUxThemeStyle to allow following current Windows theme

Sherlock 3. Nov 2023 13:45

AW: Dark Theme aber nur die Farben
 
Danke! Hab dafür gestimmt.

himitsu 3. Nov 2023 15:06

AW: Dark Theme aber nur die Farben
 
Also am Besten das Dark-Theme garnicht verwenden.

Es häufen sich die Bugreports, diesbezüglich.
z.B. soll auch das Drucken des Quellcodes Probleme bereiten (OK, es ist ein Feature, um den Diebstahl dessen zu unterbinden, also dass ihn sich wer heimlich mit heim nimmt)

Uwe Raabe 3. Nov 2023 15:20

AW: Dark Theme aber nur die Farben
 
Zitat:

Zitat von himitsu (Beitrag 1528987)
Also am Besten das Dark-Theme garnicht verwenden.

Es häufen sich die Bugreports, diesbezüglich.
z.B. soll auch das Drucken des Quellcodes Probleme bereiten

Von welchem Dark Theme redest du denn da? Das von der Delphi IDE?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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