4.31 certaine API pose problème

Archive.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

4.31 certaine API pose problème

Message 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
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message 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 ! :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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.
Image
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Message 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
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

merci beaucoup je vais essayer !! :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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)
Répondre