Fonthöhe eines geladenen Fonts bestimmen
Verfasst: 01.09.2009 15:41
Wenn man einen Font lädt muß man die Höhe angeben. 
Dem Programm kann man dies mittels einer Konstante oder einer meist globalen Variablen mitteilen.
Aber was macht man, wenn eine DLL oder auch nur eine Include-Datei diese Höhe wissen muß.
Eine Include sollte in sich gekapselt und unabhängig von externen Variablen sein.
Hier eine Lösung. incl. einer kleinen Zugabe
__________________________________________________
Thread verschoben
Allgemein>Code, Tipps und Tricks
01.09.2009
RSBasic

Dem Programm kann man dies mittels einer Konstante oder einer meist globalen Variablen mitteilen.
Aber was macht man, wenn eine DLL oder auch nur eine Include-Datei diese Höhe wissen muß.
Eine Include sollte in sich gekapselt und unabhängig von externen Variablen sein.
Hier eine Lösung. incl. einer kleinen Zugabe
Code: Alles auswählen
Procedure GadgetFontHoehe(pbnr, text$ = "", *size.size = 0)
fontid = GetGadgetFont(pbnr)
dc = GetDC_(0)
pixely = GetDeviceCaps_(dc, #LOGPIXELSY)
GetObject_(fontid, SizeOf(LOGFONT), lg.LOGFONT)
fonthoehe = -MulDiv_(lg\lfHeight, 72, pixely)
If text$ And *size ;als Zugabe Höhe + Breite eines Strings
GetTextExtentPoint32_(dc, text$, Len(text$), *size)
EndIf
ProcedureReturn fonthoehe
EndProcedure
; --------------------------------
Enumeration
#win1
#but1
#but2
#but3
#font1
#font2
EndEnumeration
LoadFont(#font1, "Arial", 10)
LoadFont(#font2, "Arial", 14)
OpenWindow(#win1,0,0,200,200,"",#PB_Window_SystemMenu|1)
ButtonGadget(#but1,10,20,80,20,"default")
ButtonGadget(#but2,10,50,80,25,"font1")
ButtonGadget(#but3,10,80,80,30,"Ffont2")
SetGadgetFont(#but2, FontID(#font1))
SetGadgetFont(#but3, FontID(#font2))
Repeat
event = WaitWindowEvent(1)
If Event = #PB_Event_Gadget
welcherButton = EventGadget()
Select welcherButton
Case #but1: Debug GadgetFontHoehe(#but1)
Case #but2: Debug GadgetFontHoehe(#but2)
Case #but3: Debug GadgetFontHoehe(#but3, "Hallo", size.size)
Debug size\cx
Debug size\cy
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
Thread verschoben
Allgemein>Code, Tipps und Tricks
01.09.2009
RSBasic