Fonthöhe eines geladenen Fonts bestimmen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Fonthöhe eines geladenen Fonts bestimmen

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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!
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
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

Beitrag 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:
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
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

:iamwithstupid:
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Fonthöhe eines geladenen Fonts bestimmen

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten