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.
Ist Schriftart 'xyz' installiert?
Danke für die Angaben.
Hier nun also der Code für die
Besten Dank für die Hilfe.
--Hannes
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
--Hannes