Seite 2 von 2

Verfasst: 06.06.2006 15:33
von Jilocasin
Der Code funktioniert, aber es ist mir nicht klar, was er macht.

Er sucht den "Device Contect" (DC) des Desktops. Dann geht er mittels einer Prozedure (die auf das Handle einer andere Prozedure verweist) alle möglichen (darstellbaren) Schriftarten durch.

Verfasst: 07.06.2006 21:14
von Hannes
Danke für die Angaben.


Hier nun also der Code für die

Code: Alles auswählen

 Procedure.b  istSchriftartVerfuegbar(schriftartname.s) 

Code: Alles auswählen

Procedure EnumFontFamProc(*lpelf.ENUMLOGFONT, *lpntm.NEWTEXTMETRIC, FontType, lParam)
  Shared gesuchterName.s
  Shared gefunden.b
  Define name.s
  
  name.s = PeekS(@*lpelf\elfLogFont\lfFaceName[0])
  
  If name.s = gesuchterName.s 
    gefunden.b = 1
  EndIf 
  
  ProcedureReturn 1
EndProcedure



 Procedure.b  istSchriftartVerfuegbar(schriftartname.s) 
  Shared gesuchterName.s
  Shared gefunden.b
  gesuchterName.s = schriftartname.s
  gefunden.b = 0
  
  hWnd = GetDesktopWindow_()
  hDC = GetDC_(hWnd)       ; DC = Device Context
  
  EnumFontFamilies_(hDC, 0, @EnumFontFamProc(), 0)
  ; EnumFontFamilies ruft die Prozedur EnumFontFamProc() für jede installierte Schriftart einzeln auf
  ; @EnumFontFamProc() ist der Zeiger auf die Prozedur EnumFontFamProc()
  
  ReleaseDC_ (hWnd, hDC)
  ProcedureReturn gefunden.b
EndProcedure

Code: Alles auswählen

; -------------------------------------------------------------------
; Tests
; -------------------------------------------------------------------

If istSchriftartVerfuegbar("Lucida Sans Unicode")
  MessageRequester("Schriftart verfügbar", "Lucida Sans Unicode ", #PB_MessageRequester_Ok          )
EndIf   


If istSchriftartVerfuegbar("Schriftart XYZ")
Else
  MessageRequester("Schriftart NICHT verfügbar", "Schriftart XYZ", #PB_MessageRequester_Ok          )
EndIf  
Besten Dank für die Hilfe.

--Hannes