Windows Standardschrift
Verfasst: 30.03.2011 21:38
Hallo,
ich bin neuer PureBasic-Nutzer.
Mir ist aufgefallen, daß PureBasic in meinen Dialogen nicht die in Windows eingestellte Schrift für Dialogboxen verwendet. Ich habe im alten Klassik-Theme extra überall die die "Segoe UI" (9 Punkte) eingestellt, weil sie etwas breiter und dadurch besser lesbar ist.
(Die Dialoge der Entwicklungsumgebung verwenden übrigens auch die falsche Schrift)
Meine Suche hier im Forum war nicht erfolgreich, was aber auch an der Wahl meiner Suchbegriffen gelegen haben könnte.
Ich habe mir jetzt folgende Procedure gebastelt (eigentlich umgeschrieben). Wenn man mit der PB-Syntax noch nicht so vertraut ist, ist das gar nicht so einfach. Aber die Entwicklungsumgebung ist insbesondere mit der Autovervollständigung sehr hilfreich...
Diese Procedure rufe ich jetzt vor OpenWindow() auf.
Unter XP funktioniert es bei mir. Würde mich freuen, wenn die PB-Profis mal drüberschauen und mitteilen, ob das so OK ist.
Oder gibt es eine einfachere, elegantere Methode, vielleicht sogar eine PB-interne Funktion.
Gruß
ich bin neuer PureBasic-Nutzer.
Mir ist aufgefallen, daß PureBasic in meinen Dialogen nicht die in Windows eingestellte Schrift für Dialogboxen verwendet. Ich habe im alten Klassik-Theme extra überall die die "Segoe UI" (9 Punkte) eingestellt, weil sie etwas breiter und dadurch besser lesbar ist.
(Die Dialoge der Entwicklungsumgebung verwenden übrigens auch die falsche Schrift)
Meine Suche hier im Forum war nicht erfolgreich, was aber auch an der Wahl meiner Suchbegriffen gelegen haben könnte.
Ich habe mir jetzt folgende Procedure gebastelt (eigentlich umgeschrieben). Wenn man mit der PB-Syntax noch nicht so vertraut ist, ist das gar nicht so einfach. Aber die Entwicklungsumgebung ist insbesondere mit der Autovervollständigung sehr hilfreich...
Code: Alles auswählen
Procedure SetDialogFont(hWnd.l = #Null)
Protected ncm.NONCLIENTMETRICS
Protected hDC.l
Protected i.i
Protected name.s, points.l, styles.l, charset.l
ncm\cbSize = SizeOf(ncm)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(ncm), @ncm, #Null)
name = PeekS(@ncm\lfMessageFont\lfFaceName[0])
charset = ncm\lfMessageFont\lfCharSet
hDC = GetDC_(hWnd)
points = -MulDiv_(ncm\lfMessageFont\lfHeight, 72, GetDeviceCaps_(hDC, #LOGPIXELSY))
If ncm\lfMessageFont\lfWeight=700 : styles = #PB_Font_Bold : EndIf
If ncm\lfMessageFont\lfItalic > 0 : styles = styles + #PB_Font_Italic : EndIf
ReleaseDC_(hWnd.l, hDC)
SetGadgetFont(#PB_Default, FontID(LoadFont(#PB_Any, name, points, styles)))
EndProcedure
Unter XP funktioniert es bei mir. Würde mich freuen, wenn die PB-Profis mal drüberschauen und mitteilen, ob das so OK ist.
Oder gibt es eine einfachere, elegantere Methode, vielleicht sogar eine PB-interne Funktion.
Gruß