Größe des System Font bei XP und Win7

Anfängerfragen zum Programmieren mit PureBasic.
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Größe des System Font bei XP und Win7

Beitrag von Lord »

Hallo!

Gibt es eine sichere/andere Methode, die Systemfontgröße
sowohl bei XP als auch Win7 festzustellen?
Ich habe im Board eine Prozedure (auch in Abwandlungen)
gefunden, die aber nicht immer eindeutige Ergebnisse liefert.
Die ursprüngliche Prozedur stammt glaube ich von Fluid Byte:

Code: Alles auswählen

Enumeration
   #SF_CAPTION
   #SF_ICON
   #SF_MENU
   #SF_MESSAGE
   #SF_SMCAPTION
   #SF_STATUS
EndEnumeration

Procedure GetSystemFont(nIndex)
   Protected phkResult, lpValueName.s, lpcbData, *lplf.LOGFONT, hLibGDI, Result
   
   Select nIndex
      Case #SF_CAPTION : lpValueName = "CaptionFont"
      Case #SF_ICON : lpValueName = "IconFont"
      Case #SF_MENU : lpValueName = "MenuFont"
      Case #SF_MESSAGE : lpValueName = "MessageFont"
      Case #SF_SMCAPTION : lpValueName = "SmCaptionFont"
      Case #SF_STATUS : lpValueName = "StatusFont"
   EndSelect
   
   RegOpenKeyEx_(#HKEY_CURRENT_USER,"Control Panel\Desktop\WindowMetrics",0,#KEY_READ,@phkResult)      
   RegQueryValueEx_(phkResult,lpValueName,0,0,0,@lpcbData)
    *lplf = AllocateMemory(lpcbData)
   RegQueryValueEx_(phkResult,lpValueName,0,0,*lplf,@lpcbData)
   RegCloseKey_(phkResult)
   
   hLibGDI = OpenLibrary(#PB_Any,"Gdi32.dll")
   Result = CallFunction(hLibGDI,"CreateFontIndirectW",*lplf)
   CloseLibrary(hLibGDI)
   
   FreeMemory(*lplf)

   ProcedureReturn Result
EndProcedure

OpenWindow(0,0,0,320,240,"W",#WS_CAPTION | #WS_SYSMENU | 1)
 
hFntCaption = GetSystemFont(#SF_CAPTION)

Caption$ = GetWindowTitle(0)

StartDrawing(WindowOutput(0))
DrawingFont(hFntCaption)
Box(10,10,200,100,#Red)
DrawText(20,20,Caption$)
Debug TextWidth(Caption$)
Debug TextHeight(Caption$)
StopDrawing()

DeleteObject_(hFntCaption)

While WaitWindowEvent() ! 16 : Wend
Wenn in den Systemeigenschaften die Anzeige geändert wird,
erhalte ich für den Buchstaben "W" z.B. folgende Werte:
(B=Breite, H= Höhe)

Code: Alles auswählen

Text-         XP        Win7
größe       B    H     B    H
100%       10   13    11   15
125%       12   16    14   20
150%       12   16    17   25
Bei XP werden bei 125% und 150% identische Werte ermittelt.

Gibt es eine andere Möglichkeit die Fontgröße bei beiden BS
und bei allen Anzeigegrößen zu ermitteln, damit z.B. Gadget-
größen an die unterschiedlichen Textgrößen angepaßt werden
können?
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Größe des System Font bei XP und Win7

Beitrag von ts-soft »

Ich denke mal, dieser Beitrag sollte helfen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Größe des System Font bei XP und Win7

Beitrag von Josh »

Lord hat geschrieben: Bei XP werden bei 125% und 150% identische Werte ermittelt.
Das ist schon richtig. Die Werte können je nach System unterschiedlich sein. So können z.B. die gleichen Werte bei 100% und 150% auftreten, obwohl bei 125% ein anderer Wert kommt.

Ab gewissen Werten verdoppelt Windows intern einige Pixel. Also kannst du die von die von dir ermittelten Werte auch zur Berechnung deiner Gadgetgröße verwenden, da die Gadgets dann auch mit verdoppelten Pixel dargestellt werden.

Wenn es allerdings nur darum geht, deine Gadgetgößen anzupassen, solltest du auf jedem Fall den Font aus dem Gadget nehmen und nicht die Größe der Systemfonts.
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: Größe des System Font bei XP und Win7

Beitrag von Lord »

@ts-soft
Danke für den Link. Das sieht richtig gut aus.

@Josh
Deinen Worten kann ich nicht so ganz folgen.
Du schreibst, daß z.B gleiche Werte bei 100%
und bei 150% auftreten können. Ich habe bei
125% und 150% gleiche Werte. Wie soll man
denn diese beiden Fälle unterscheiden?
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Größe des System Font bei XP und Win7

Beitrag von Josh »

@Lord

Du brauchst gar nichts zu unterscheiden. Du verwendest einfach die Werte die du mit deiner Berechnung herausbekommst. Ob Windows dann intern einige Pixel verdoppelt, braucht dich nicht zu interessieren.

In Freak's Code dürfte aber aber doch ein Fehler sein. Bei einer Darstellung von 150% wird es bei einem größeren Font nicht richtig dargestellt.
Antworten