Seite 1 von 1

GetSystemFont

Verfasst: 17.03.2008 23:21
von sibru
Mit dieser Funktion können die System-Fonts bestimmt werden
(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
viel Erfolg damit...

Siggi

Verfasst: 18.03.2008 00:12
von Fluid Byte
Warum kommt mir das nur so bekannt vor?

Ach ja ...

http://www.purebasic.fr/german/viewtopic.php?t=15460