![]() |
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. |
AW: Dark Theme aber nur die Farben
Zitat:
|
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.
|
AW: Dark Theme aber nur die Farben
Zitat:
![]() |
AW: Dark Theme aber nur die Farben
Zitat:
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; |
AW: Dark Theme aber nur die Farben
Zitat:
|
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? |
AW: Dark Theme aber nur die Farben
Zitat:
![]() |
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:
ausgelöst wurde.
procedure TForm1.WMSettingChange(var Message: TWMSettingChange);
begin if SameText('ImmersiveColorSet', String(Message.Section)) then // statt HandleThemes; sollte hier entsprechend Themeless reagiert werden end; |
AW: Dark Theme aber nur die Farben
Zitat:
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. |
AW: Dark Theme aber nur die Farben
Das scheint noch schlimmer zu sein, als ich dachte:
Hier ![]() Zitat:
Erst hier sieht man, das mehr dahinter steckt. Zitat:
|
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!!!
|
AW: Dark Theme aber nur die Farben
Der aktuelle Stand in der VCL basiert auf den Systemfarben wie z.B.
Delphi-Quellcode:
. Weist man der
clBtnFace
Delphi-Quellcode:
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.
Brush.Color
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. |
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.
|
AW: Dark Theme aber nur die Farben
Zitat:
|
AW: Dark Theme aber nur die Farben
Zitat:
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. |
Zitat:
Nebenbei: Gibt es dafür eigentlich schon einen entsprechenden Feature-Request? |
AW: Dark Theme aber nur die Farben
Zitat:
![]() ![]() Bis bald... Thomas |
AW: Dark Theme aber nur die Farben
Ich habe bei MS dies gefunden (
![]() Zitat:
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. |
AW: Dark Theme aber nur die Farben
Zitat:
![]() ![]() 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. |
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:
![]() 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. |
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
![]() ![]() ![]() Das ist wirklich Fleißarbeit. |
AW: Dark Theme aber nur die Farben
Ich habe jetzt einfach mal einen Feature-Request dafür angelegt:
![]() |
AW: Dark Theme aber nur die Farben
Danke! Hab dafür gestimmt.
|
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) |
AW: Dark Theme aber nur die Farben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz