(Desktop: "Darstellung"/"Eigenschaften"/"erweitert"...).
PB 4.0 Code:
Code: Alles auswählen
;Modul GetSystemFont Version 1.0 vom 19.02.2008
;
;Funktion: liefert Font-Daten von System-Font´s und läd diese auch gleich
; Es werden die System-FontDaten bestimmt, die via "Darstellung"/
; "Eigenschaften"/"erweitert" auf´m Desktop eingestellt werden.
;
;Aufruf: FontID = GetSystemFont(SysFontNr.l)
; wobei: SysFontNr = der Index des gewünschten System-Font´s:
; 1 = Titelleiste des aktiven / deaktiven Fensters
; (auch für Taskleiste und Fenster-Text)
; 2 = Symbol (Desktop-Icon´s)
; 3 = Fenster-Menü, markierte Elemente
; 4 = Dialogfeld (MessageRequester)
; 5 = Paletten-Titel
; 6 = QuickInfo, auch StatusZeile
; Sofern eine gültige SysFontNr angegeben wurde, so wird dieser
; Font geladen und dessen Handle als FunktionsWert geliefert.
; Auch die folgenden Global´s sind belegt:
Global SystemFont_Name$ ;Schriftart-Name
Global SystemFont_Size ;Schriftart-Größe
Global SystemFont_Style ;Schriftart-Attribute
;#jaPBeExt exit
Procedure GetSystemFont(FontNr.l) ;- Läd einen System-Font (WinTitel, Menü, Message, Status...) und liefert dessen FontHandle
Protected RegID.l, RegKey$, RegEntry.l, *LogFont.LOGFONT, FontID.l, Pos.l, Char.l, Win_DC.l
Select FontNr
Case 1 : RegKey$ = "CaptionFont" ;FensterTitel (aktiv und deaktiv)
Case 2 : RegKey$ = "IconFont" ;Symbol (Icon-Texte)
Case 3 : RegKey$ = "MenuFont" ;Menü, markierte Elemente
Case 4 : RegKey$ = "MessageFont" ;DialogFeld (MessageRequester...)
Case 5 : RegKey$ = "SmCaptionFont" ;Paletten-Titel
Case 6 : RegKey$ = "StatusFont" ;QuickInfo (auch StatusZeile)
EndSelect
SystemFont_Name$ = "" : SystemFont_Size = 0 : SystemFont_Style = 0 ;reset Global´s
If RegKey$>"" ;FontID gültig
RegOpenKeyEx_(#HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", 0, #KEY_READ, @RegID)
RegQueryValueEx_(RegID, RegKey$, 0, 0, 0, @RegEntry)
*LogFont = AllocateMemory(100)
RegQueryValueEx_(RegID, RegKey$, 0, 0, *LogFont, @RegEntry)
Pos = 28 ;start of lfFaceName
Repeat
Char = PeekB(*LogFont + Pos)
If Char : SystemFont_Name$ + Chr(Char) : Pos + 2 : EndIf
Until Char = 0
SystemFont_Size = PeekL(*LogFont) : If SystemFont_Size<0 : SystemFont_Size * - 1 : EndIf
Win_DC = GetDC_(WindowID(0))
SystemFont_Size = Round(SystemFont_Size * 72 / GetDeviceCaps_(Win_DC, #LOGPIXELSY), 1)
If PeekL(*LogFont + 16) = 700 : SystemFont_Style + #PB_Font_Bold : EndIf
If PeekB(*LogFont + 20) : SystemFont_Style + #PB_Font_Italic : EndIf
If PeekB(*LogFont + 21) : SystemFont_Style + #PB_Font_Underline : EndIf
If PeekB(*LogFont + 22) : SystemFont_Style + #PB_Font_StrikeOut : EndIf
If PeekB(*LogFont + 26) : SystemFont_Style + #PB_Font_HighQuality : EndIf
FontID = LoadFont(FontNr, SystemFont_Name$, SystemFont_Size, SystemFont_Style)
RegCloseKey_(RegID)
FreeMemory(*LogFont)
EndIf
ProcedureReturn FontID
EndProcedure
Siggi