Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

System.Drawing.Font Fontfamilies wie im Forms-FontDialog zusammenfassen
Gimmick
myCSharp.de - Member



Dabei seit:
Beiträge: 132

Themenstarter:

System.Drawing.Font Fontfamilies wie im Forms-FontDialog zusammenfassen

beantworten | zitieren | melden

Moin,

ich bastel mir gerade diverse Dialoge mit Zusatzfunktionen nach, unter anderem auch den Forms FontDialog.
Dabei ist mir nun aufgefallen, dass in dem original Dialog einige FontFamilies zusammengefasst und dann über den Style ausgewählt werden, Beispiel:
Arial
Arial Black

Bei mir:
Arial - Regular, Bold, Italic
Arial Black - Regular, Bold, Italic
...

Bei Windows:
Arial - Halb Schmal, Halb Schmal Kursiv, Kursiv, Standard, Halb Schmal Fett, Halb Schmal Fett Kursiv, Fett, Fett Kursiv, Schwarz, Schwarz Schräg

Für das Abfragen der Families nehme ich:


System.Drawing.Text.InstalledFontCollection installedFonts = new System.Drawing.Text.InstalledFontCollection();
Foreach(System.Drawing.Font fontfamily in installedFonts.Families)
//In Liste einfügen ...

Und für das Abfragen der verfügbaren Stile:


foreach(System.Drawing.FontStyle style in Enum.GetValues(typeof(System.Drawing.FontStyle)))
{
if(SelectedFontFamily.IsStyleAvailable(style))
...
}

Mein Frage ist nun: Wie kann man die Fontfamilien so zusammenfassen, wie der Dialog das macht, und die zusätzlichen "Styles" erhalten?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.757

beantworten | zitieren | melden

Zitat
Arial - Halb Schmal, Halb Schmal Kursiv, Kursiv, Standard, Halb Schmal Fett, Halb Schmal Fett Kursiv, Fett, Fett Kursiv, Schwarz, Schwarz Schräg
Von welchem Dialog oder welcher Anwendung sprichst Du?

Im Windows Font Manager erfolgt die Auflistung bei Windows 10 zumindest zunächst nach Font Families.
Das Untermenü listet dann die Faces auf.

WinWord listet einfach alle Fonts nach dem Fullname ohne Gruppierung auf.

Beide gehen direkt auf die Registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts).
Haben also wohl eine eigene Logik.
private Nachricht | Beiträge des Benutzers
Gimmick
myCSharp.de - Member



Dabei seit:
Beiträge: 132

Themenstarter:

beantworten | zitieren | melden

Ich rede vom ganz normalen Windows-Forms FontDialog in .NET Framework 4.8/.NET6 Win 10.
In der Tat ist die Darstellung in unterschiedlichen MS-Programmen ebenfalls unterschiedlich. In den Optionen von Windows wird dann von "Metadaten" gesprochen ... so eine richtige Einheitlichkeit scheint es nicht zu geben.

Wäre natürlich schön diese eigene Logik zu kennen Weniger wegen der Gruppierung, sondern mehr, weil .IsStyleAvailable(style) true zurück gibt, obwohl sich bei Auswahl des Styles gar nichts ändert. Da werden die Styles dann wohl unterstützt, aber nicht verwendet.

Ich vermute ein wenig, dass System.Drawing.Font nicht wie System.Windows.Font zwischen Font-Weight und Font-Style unterscheidet und eben alles über die paar enum-typen für den Style abfackelt.

Habe mir mal das WPF Beispiel von MS angesehen, mit Windows.Media.Font scheinen sich diese Probleme in Luft auf zu lösen.

Tendiere nun doch eher dazu es für Drawing.Font einfach zu halten und den Dialog für Media.Font bei Zeiten nochmal zu ergänzen :D.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gimmick am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.757

beantworten | zitieren | melden

Zitat von Gimmick
Ich rede vom ganz normalen Windows-Forms FontDialog in .NET Framework 4.8/.NET6 Win 10.
Also von https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.fontdialog?view=windowsdesktop-6.0?
Das hat ja nichts mit Windows zutun, sondern ist einfach eine proprietäre Implementierung in .NET.

Aber der Quellcode ist doch Open Source, dann schau doch einfach nach ;-)
Zitat
Ich vermute ein wenig, dass System.Drawing.Font nicht wie System.Windows.Font zwischen Font-Weight und Font-Style unterscheidet und eben alles über die paar enum-typen für den Style abfackelt.
Technisch gesehen sind alles getrennte Fonts, die einfach anhand des Familiennamens zusammen gefasst werden.
Es gibt auf der Font-Ebene (Datei etc) kein Merkmal für Family und Style.
private Nachricht | Beiträge des Benutzers
Gimmick
myCSharp.de - Member



Dabei seit:
Beiträge: 132

Themenstarter:

beantworten | zitieren | melden


Habe mal nachgeschaut... ist mir zuviel Win32 zum "mal eben nachvollziehen". Werde mich an dem WPF-Beispiel orientieren und den Drawing.Font-Dialog so lassen ^^.
private Nachricht | Beiträge des Benutzers