Seite 1 von 1

Größe des System Font bei XP und Win7

Verfasst: 30.01.2013 18:28
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?

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

Verfasst: 30.01.2013 18:41
von ts-soft
Ich denke mal, dieser Beitrag sollte helfen.

Gruß
Thomas

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

Verfasst: 30.01.2013 19:15
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.

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

Verfasst: 30.01.2013 20:35
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?

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

Verfasst: 30.01.2013 20:52
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.