
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