Seite 1 von 1

Systemfonts rausfinden

Verfasst: 09.12.2006 12:30
von Kekskiller
Hi, Leute.

Wie komme ich an die vom Benutzer gesetzten Systemschriften ran? Ich meine ohne Style von XP, man kann im Eigenschaftsfenster von Windows doch alle Schriften und Rand-Größen, usw. einstellen. Ich habs bereits mit GetStockObject_() probiert, aber diese Fonts sind der reinste Müll... und zudem nur feste Fonts. Sie sind deswegen Müll, weil ich sehr oft GetTextExtentPoint32_() und GetTextMetrics_() benutze. Die liefern mit den diesen angeblichen Systemschriften nicht die korrekten Angaben von BReite und Höhe des Textes.

Verfasst: 15.12.2006 23:05
von Graffiti
Es gibt einen Code von Falco und Jens vielleicht hilft er dir weiter
ich habe in meiner Anwendung die Prozedur verändert damit die Schriftart in PB der Systemschrift angepasst wird und nicht über die Gadgets schreibt
du solltest zuerst den Code von den beiden ausführen dann hast du deine
Systemschrift und in deinem Programm dann deine DPIs in der Prozedur eintragen dann ist es auf jedem Rechner das richtige Erscheinungsbild, musst du aber testen
denke ich :roll:

Originalcode auf PB4 übersetzt:

Code: Alles auswählen

; Desktopschriftgrad feststellen
; Create: Falko Lünsmann / Jens Haipeter
; Date  : 24.12.2005

Procedure.w Desktop_DPI()
  hwnd_0.l =GetDesktopWindow_()
  hdc_0.l  =GetDC_(hwnd_0)
  logPix.w = GetDeviceCaps_(hdc_0,#LOGPIXELSX)
  ReleaseDC_(hwnd_0, hdc_0)
  ; Die Procedure gibt den Schriftgrad auf dem Desktop zurück,
  ; konnte kein Wert gefunden werden, wird -1 zurückgegeben
  ; Standard ist 96 ppi, kleine Schriftarten
  If logPix<1: logPix=-1: EndIf
  ProcedureReturn logPix 
EndProcedure

Enumeration
  #Main_Font
EndEnumeration  

; Abfrage
  Global _FtFkt.f
  Global _FtNam.s
  _FtNam="MS Sans Serif"
  _FtFkt=1
  If Desktop_DPI()>0
    _FtFkt=96/Desktop_DPI()
    If Desktop_DPI()>96
      _FtNam="Arial"
    EndIf
  EndIf

; GadgetFontText
  If LoadFont(#Main_Font ,_FtNam, 8*_FtFkt): Else: End: EndIf
  SetGadgetFont(#PB_Default,FontID(#Main_Font))

; Ausgabe
  MessageRequester("Die aktuelle Fontgröße ...","des Systems ist "+Str(Desktop_DPI()),0)
  End
 
meine Prozedur:

Code: Alles auswählen

  Procedure.w Desktop_DPI()
  hwnd_0.l =GetDesktopWindow_()
  hdc_0.l  =GetDC_(hwnd_0)
  logPix.w = GetDeviceCaps_(hdc_0,#LOGPIXELSX)
  ReleaseDC_(hwnd_0, hdc_0)
   
  If logPix<1: logPix=-1: EndIf
   
  If logPix>0 : logPix=96/logPix : EndIf
  
  ProcedureReturn logPix 
EndProcedure

Code: Alles auswählen

Global FontID1
FontID1 = LoadFont(1, "Arial", 9*Desktop_DPI(), #PB_Font_Bold)

Verfasst: 16.12.2006 12:40
von Kekskiller
Ich danke dir, dass so mir geantwortet hast - ich dachte schon, ich konnte das knicken - aber ich weiß nicht so recht, was ich mir daraus basteln soll. Denn leider brauche ich wirklich die Fonts, die man selbst im System einstellen kann, daher ist das für mich leider unbrauchbar...