Page 1 sur 1

4.31 certaine API pose problème

Publié : jeu. 18/juin/2009 20:09
par Thyphoon
currieux je viens de passer a la version 4.31 et ces fonctions que j'utilisais en 4.30 ne fonctionne plus

Code : Tout sélectionner

Procedure AddFontRessource(FontFileName.s)
  AddFontResource_(FontFileName.s)
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE, #NUL, #NUL)
EndProcedure

Procedure RemoveFontRessource(FontFileName.s)
  RemoveFontResource_(FontFileName.s)
EndProcedure
ces fonctions permettent d'installer et de désinstaller une font

Publié : jeu. 18/juin/2009 20:47
par KrisJNT
J'ai peut-être une solution (un peu bancale, certes, mais efficace) :

tu fais une DLL avec PB 4.30, et tu appelles tes fonctions compilées dans 4.31 ! :)

Publié : ven. 19/juin/2009 11:00
par Flype
Je ne sais pas pourquoi çà plante chez toi parcequ'avec ma version 4.31 (x86) les fonctions que tu cites fonctionnent bien (unicode ou pas d'ailleurs) :

Debug AddFontResource_("ProggyCleanSZBP.ttf")
retourne 1 si la police existe bien sûr.


Testé sur Vista SP1.

Publié : lun. 10/août/2009 11:48
par lepiaf31
J'ai eu le meme probleme :( . Pour le resoudre j'ai utilisé AddFontResourceEx:

Code : Tout sélectionner

Procedure LoadFontFromFile(Font, FontFile.s, FontName.s, FontSize, FontStyle=0)
  library = OpenLibrary(#PB_Any, "gdi32.dll")
  If library
    FR_PRIVATE = Val("$10")
    Result = CallFunction(library, "AddFontResourceExA", FontFile, FR_PRIVATE, 0)
    CloseLibrary(library)
    SendMessage_(#HWND_BROADCAST, #WM_FONTCHANGE, 0, 0)
    If Result
      Result = LoadFont(Font, FontName, FontSize, FontStyle)
      If Font <> #PB_Any
        ProcedureReturn Font
      Else
        ProcedureReturn Result
      EndIf
    Else
      ProcedureReturn 0
    EndIf
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

Publié : lun. 10/août/2009 17:01
par Thyphoon
merci beaucoup je vais essayer !! :)

Publié : lun. 10/août/2009 19:27
par Flype
Salut Thyphoon,

Sinon tu peux toujours importer les fonctions dont tu as besoin.

Code : Tout sélectionner

Import "Gdi32.lib"
	CompilerIf #PB_Compiler_Unicode
		AddFontResource_(FontFileName.p-unicode) As "_AddFontResourceW@4"
		RemoveFontResource_(FontFilename.p-unicode) As "_RemoveFontResourceW@4"
	CompilerElse
		AddFontResource_(FontFileName.p-ascii) As "_AddFontResourceA@4"
		RemoveFontResource_(FontFilename.p-ascii) As "_RemoveFontResourceA@4"
	CompilerEndIf
EndImport

Procedure AddFontRessource(FontFileName.s) 
	
	Protected NbFontsAdded = AddFontResource_(FontFileName)
	
	If NbFontsAdded > 0
		SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE, #NUL, #NUL) 
	EndIf
	
	ProcedureReturn NbFontsAdded
	
EndProcedure

Procedure RemoveFontRessource(FontFileName.s)
	
	ProcedureReturn RemoveFontResource_(FontFileName)
	
EndProcedure

#FONTNAME = "ProggyClean.fon"

Debug AddFontRessource(#FONTNAME)
Debug RemoveFontRessource(#FONTNAME)