Autor |
Beitrag |
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 19.02.20 22:35
Schönen Abend!
Wie kann ich den von Windows für Meldungsfenster verwendeten Font herausfinden? Ich meine damit solche Meldungsfenster, die man in Delphi mit MessageBox, ShowMessage etc. erzeugt.
Es geht darum, dass ich einen eigenen, selbst geschriebenen MessageDialog habe, der unter Windows 7 zufällig den selben Font hatte wie die "herkömmlichen" Meldungen. Windows 10 benutzt für die selben Meldungen jedoch einen anderen Font. Kann man den ermitteln?
Natürlich könnte ich jetzt einfach meinen MessageDialog anpassen, aber das wäre eben doch nur wieder hard-codiert. Ich möchte das aber lieber flexibler machen, in dem er den von Windows benutzen Font verwendet.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 20.02.20 10:45
(T)Screen.MessageFont sollte der passende Font sein.
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 20.02.20 18:19
Leider nicht, es ändert sich nichts.
galagher hat folgendes geschrieben : | Ich meine damit solche Meldungsfenster, die man in Delphi mit [...] ShowMessage etc. erzeugt. |
Da habe ich mich geirrt, bei ShowMessage ist es der selbe Font wie in meinem MessageDialog. Bei MessageBox und Application.MessageBox hingegen nicht, da ist es entweder ein anderer Font oder die Schriftgrösse ist kleiner.
Ich vermute, dass Windows 10 bei dieser Art von Meldungen eingreift, bzw. es liegt einfach an verwendeten Design. Wäre aber schön, wenn alle Meldungsfenster die selbe Schrift verwenden!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 21.02.20 10:53
Die ganzen Standard-Fonts (und andere Einstellungen) stehen in der Registry unter "HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics" (u.a. "MessageFont"). Die Font-Einträge sind dabei aber "encrypted" (entsprechend der LOGFONTW-Struktur) - ich nehme aber mal an, daß Screen.MessageFont eben genau diesen Registry-Eintrag ausliest bzw. beschreibt (falls du den VCL-Source hast, kannst du ja mal reinschauen).
Bei der Anzeige der MessageBox können aber noch andere Faktoren wie DPI o.ä. die tatsächliche Anzeige beeinflussen.
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 21.02.20 20:32
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 22.02.20 11:39
Damit meine ich nur, daß wenn z.B. ein Anwender den Skalierungsfaktor (DPI-Wert) geändert hat, daß dann Windows bei seinen Standard-Dialogen diesen Wert mitberücksichtigt - wenn du aber einen eigenen Dialog erzeugt hast, deiner evtl. die aktuelle Einstellung nicht mit berücksichtigt (aber es gibt ja auch noch andere Einstellungen wie z.B. ClearType, welche die Darstellung beeinflussen).
Für diesen Beitrag haben gedankt: galagher
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 22.02.20 13:59
Ok, dann war die Übereinstimmung unter Windows 7 wirklich nur Zufall - es hat eben alles gepasst. Und unter Windows 10 eben nicht mehr. Das jetzt aufzuschlüsseln mag zwar möglich sein, aber ich denke, wenn, dann "Windows-seitig". Da gibt es bei Windows 10 aber bei Weitem nicht mehr so viele Möglichkeiten wie noch unter XP, und auch weniger als unter Windows 7. Wnn man von direkten Eingriffen in die Registry mal absieht.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 23.02.20 06:27
galagher hat folgendes geschrieben : | Es geht darum, dass ich einen eigenen, selbst geschriebenen MessageDialog habe |
Die Frage ist aber auch, welche Möglichkeiten der Dialog benötigt, die man nicht mit Bordmitteln abbilden kann. Windows hat ja nicht umsonst die Möglichkeit mehrere Meldungen, Details zum aufklappen, Fortschrittsbalken usw. in einem solchen Dialog anzuzeigen...
Hier in der Doku findest du auch entsprechende Screenshots:
Task Dialogs - Overview
Moderiert von Th69: URL-Titel hinzugefügt.
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 23.02.20 19:10
jaenicke hat folgendes geschrieben : | Die Frage ist aber auch, welche Möglichkeiten der Dialog benötigt, die man nicht mit Bordmitteln abbilden kann. |
Wenn mit Möglichkeiten die Schriftart / -grösse gemeint ist: Ich habe noch nicht herausgefunden, wie Windows den Font festlegt. Screen.MessageFont bringt mich leider nicht weiter.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 23.02.20 20:11
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 24.02.20 12:36
jaenicke hat folgendes geschrieben : | Nein, ich meine warum du überhaupt einen eigenen Dialog benötigst. |
Den benötige ich, weil ich ein eigenes Hilfedatei-Format entwickelt habe (ich kann HTML nicht und habe auch keine Lust, mich näher damit zu befassen!), diese Hilfedateien kann mein Dialog über den Hilfebutton aufrufen. Weiters kann der OK-Button beliebigen Text anzeigen, der Rückgabewert bleibt aber natürlich weiterhin mrOK.
Das ist ein Vorteil, wenn man hobbymässig programmiert: Man kann sich mit etwas befassen, muss es aber nicht!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 24.02.20 20:36
galagher hat folgendes geschrieben : | diese Hilfedateien kann mein Dialog über den Hilfebutton aufrufen. Weiters kann der OK-Button beliebigen Text anzeigen, der Rückgabewert bleibt aber natürlich weiterhin mrOK. |
All das kann der Taskdialog auch, der bereits seit Delphi 2009 glaube ich als TTaskDialog in Delphi existiert.
Beispiel: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| var TaskDialog: TTaskDialog; Button: TTaskDialogBaseButtonItem; begin TaskDialog := TTaskDialog.Create(Self); try TaskDialog.Title := 'Meldungstitel'; TaskDialog.Caption := 'Meldungsüberschrift'; TaskDialog.Text := 'Bist du sicher?'; TaskDialog.CommonButtons := []; TaskDialog.MainIcon := tdiInformation; Button := TaskDialog.Buttons.Add; Button.Caption := 'Mein Ok-Button'; Button.ModalResult := mrOk; Button := TaskDialog.Buttons.Add; Button.Caption := 'Abbrechen'; Button.ModalResult := mrCancel; Button := TaskDialog.Buttons.Add; Button.Caption := 'Hilfe'; Button.ModalResult := MB_HELP; if TaskDialog.Execute then case TaskDialog.ModalResult of mrOk: ShowMessage('Ok gedrückt'); mrCancel: ShowMessage('Abbrechen gedrückt'); MB_HELP: ShowMessage('Hilfe anzeigen'); end; finally TaskDialog.Free; end; end; |
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 24.02.20 21:17
jaenicke hat folgendes geschrieben : | All das kann der Taskdialog auch, der bereits seit Delphi 2009 glaube ich als TTaskDialog in Delphi existiert. |
Ok, den kannte ich tatsächlich nicht! Aber kann der auch farbigen Text anzeigen und jede möglichen Kombination an Butttons?
//Edit: Ach ja, fast hätte ich es vergessen: Auch der Hintergrund des Dialogs kann in jeder beliebigen Farbe dargestellt werden.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 24.02.20 21:37
galagher hat folgendes geschrieben : | Aber kann der auch farbigen Text anzeigen |
Entweder du möchtest, dass sich der Dialog an die Standards hält oder nicht. Die Schriftart und -farbe kommen dort aus den Einstellungen, die der Benutzer unter Windows angegeben hat. Bzw. genauer gesagt kommt das aus den Einstellungen des verwendeten Themes.
Für den normalen Benutzer ist es schon von Vorteil, wenn diese Dialoge immer gleich aussehen. Insbesondere für sehbehinderte Benutzer ist das sehr sehr wichtig. Deshalb macht ein anderer Hintergrund als vom Benutzer im System gewünscht oder andere Schriftfarben in 99,9% der Fälle keinen Sinn.
Aber wenn es einen echten Sonderfall gibt, bei dem das nötig oder gewünscht ist, dann funktioniert es mit den Stadarddialogen tatsächlich wenn, dann nur auf Umwegen. Dann macht ein eigener Dialog ggf. tatsächlich Sinn, aber dann sieht er eben auch anders aus, ggf. auch die Schriftart.
galagher hat folgendes geschrieben : | und jede möglichen Kombination an Butttons? |
Das geht, ja. Du kannst die wie im Beispiel beliebig hinzufügen oder bei Standardbuttons einfach unter CommonButtons angeben.
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 25.02.20 07:01
jaenicke hat folgendes geschrieben : | Entweder du möchtest, dass sich der Dialog an die Standards hält |
Grundsätzlich ja, ...
jaenicke hat folgendes geschrieben : | Aber wenn es einen echten Sonderfall gibt, bei dem das nötig oder gewünscht ist, |
... das war damals tatsächlich ein Sonderfall.
Jedenfalls kenne ich nun einen Dialog mehr!
Aber es bleibt die Frage offen, warum Windows 10 (oder Delphi?) verschiedene Standarddialoge in unterschiedlichen Fonts präsentiert.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 25.02.20 07:40
galagher hat folgendes geschrieben : | Aber es bleibt die Frage offen, warum Windows 10 (oder Delphi?) verschiedene Standarddialoge in unterschiedlichen Fonts präsentiert. |
Windows hat beim Taskdialog ja auch verschiedene Schriftarten. Das soll den Benutzer besser dabei unterstützen das Wesentliche schnell zu sehen, aber dennoch Details hinzuzufügen. Deshalb gibt es dort den Titel in der Titelleiste, die Überschrift als kurze Frage z.B. und einen längeren Text für Details. Und für weitere technische Details, die man nicht unbedingt gleich sehen soll, gibt es dann die Möglichkeit noch unten mehr auszuklappen.
Ich finde das schon gut strukturiert.
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 25.02.20 21:27
jaenicke hat folgendes geschrieben : | Windows hat beim Taskdialog ja auch verschiedene Schriftarten. Das soll den Benutzer besser dabei unterstützen das Wesentliche schnell zu sehen, aber dennoch Details hinzuzufügen. Deshalb gibt es dort den Titel in der Titelleiste, die Überschrift als kurze Frage z.B. und einen längeren Text für Details. Und für weitere technische Details, die man nicht unbedingt gleich sehen soll, gibt es dann die Möglichkeit noch unten mehr auszuklappen. |
Das meine ich nicht. Ich meine, warum nicht alle Dialog"arten" in der gleichen Schriftart angezeigt werden, siehe Grafik!
Einloggen, um Attachments anzusehen!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 26.02.20 14:16
galagher hat folgendes geschrieben : | Ich meine, warum nicht alle Dialog"arten" in der gleichen Schriftart angezeigt werden, siehe Grafik! |
ShowMessage und MessageDlg verwenden intern TaskDialogIndirect, also sprich den oben angesprochenen neuen Dialog, während Application.MessageBox die alte API-Funktion MessageBox verwendet.
Für diesen Beitrag haben gedankt: galagher
|
|
galagher
Beiträge: 2522
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 26.02.20 20:54
jaenicke hat folgendes geschrieben : | ShowMessage und MessageDlg verwenden intern TaskDialogIndirect, also sprich den oben angesprochenen neuen Dialog, während Application.MessageBox die alte API-Funktion MessageBox verwendet. |
Immerhin weiss ich jetzt, woran es liegt, danke!
Also verwenden manche/einige/viele Programme (auch Windows selbst?) die API-Funktion MessageBox, und man kann da eben nichts machen?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 26.02.20 21:42
galagher hat folgendes geschrieben : | Also verwenden manche/einige/viele Programme (auch Windows selbst?) die API-Funktion MessageBox, und man kann da eben nichts machen? |
An dem Unterschied nicht, nein. Die alte MessageBox wurde damals (vor 30 Jahren!) mit nur einer Schriftart entworfen und der neue TaskDialog moderner gestaltet.
|
|
|