Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 20.02.20 10:45 
(T)Screen.MessageFont sollte der passende Font sein.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 20.02.20 18:19 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
(T)Screen.MessageFont sollte der passende Font sein.
Leider nicht, es ändert sich nichts.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 21.02.20 20:32 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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).
Habe leider nichts gefunden, was mir weiter hilft.

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Bei der Anzeige der MessageBox können aber noch andere Faktoren wie DPI o.ä. die tatsächliche Anzeige beeinflussen.
Kannst du mir das bitte näher erklären?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 23.02.20 06:27 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconTh69: URL-Titel hinzugefügt.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 23.02.20 19:10 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 23.02.20 20:11 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
Nein, ich meine warum du überhaupt einen eigenen Dialog benötigst. Denn Microsoft hat ja genau um das in den meisten Fällen unnötig zu machen den Taskdialog eingeführt.

Viele machen nämlich eigene Dialoge, machen dann dort aber nicht mehr als der Standard-Taskdialog schon kann, weil sie den schlicht nicht kennen. Deshalb wollte ich nur darauf hinweisen, falls du den noch nicht kennst.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 24.02.20 12:36 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 24.02.20 20:36 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 24.02.20 21:17 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 24.02.20 21:37 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 25.02.20 07:01 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Entweder du möchtest, dass sich der Dialog an die Standards hält
Grundsätzlich ja, ...

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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! :mrgreen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 25.02.20 07:40 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 25.02.20 21:27 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 26.02.20 14:16 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 26.02.20 20:54 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 26.02.20 21:42 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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.