Seite 1 von 1

Fonthöhe eines geladenen Fonts bestimmen

Verfasst: 01.09.2009 15:41
von hjbremer
Wenn man einen Font lädt muß man die Höhe angeben. :D
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

Verfasst: 01.09.2009 16:21
von RSBasic
@hjbremer
Es ist schön, dass du nützliche Beispielcodes postest, aber bitte erstell deinen Thread im richtigen Unterforum!
Ich sags nocheinmal:
RSBasic hat geschrieben:Wenn du einen Beispielcode posten möchtest, dann bitte im "Code, Tipps und Tricks"-Unterforum posten.
__________________________________________________
Anfänger hat geschrieben:Anfängerfragen zum Programmieren mit PureBasic.
Allgemein hat geschrieben:Für allgemeine Fragen zur Programmierung mit PureBasic.
Code, Tipps und Tricks hat geschrieben:Hier könnt Ihr gute, von Euch geschriebene Codes posten.
__________________________________________________

Bitte das nächste Mal selber dran denken, danke!

Verfasst: 01.09.2009 16:37
von ts-soft
RSBasic hat geschrieben:@hjbremer
Es ist schön, dass du nützliche Beispielcodes postest, aber bitte erstell deinen Thread im richtigen Unterforum!
Ohne declarierte Variablen ist es aber auch kein Code für Tipps & Tricks :mrgreen:

Verfasst: 01.09.2009 18:45
von hjbremer
:iamwithstupid:

Re: Fonthöhe eines geladenen Fonts bestimmen

Verfasst: 12.10.2009 11:30
von hjbremer
und wenn man den Namen des geladenen Fonts wissen will

Code: Alles auswählen

Procedure.s hj_GetFontName(pbnr)
Protected lg.LOGFONT
Protected fontid = GetGadgetFont(pbnr)
Protected pixely = GetDeviceCaps_(GetDC_(0), #LOGPIXELSY)
Protected retvalue = GetObject_(fontid, SizeOf(LOGFONT), lg) 
Protected fontname$ = PeekS(@lg\lffacename)
ProcedureReturn fontname$
EndProcedure