Page 2 sur 2

Re: LoadFont

Publié : mar. 02/mars/2010 18:02
par venom
Le code de kernadec fonctionne très bien sur mon seven :wink:

Bien entendu la fonte est bien installer dans le dossier du système d'exploitation, pas dans mon C: par exemple.







@++

Re: LoadFont

Publié : mar. 02/mars/2010 23:16
par PAPIPP
Bonjour à tous
peut-être avec la fonction Fontrequester qui permet de choisir parmi les polices installées

Code : Tout sélectionner

    Resultat = FontRequester("*", 0, #PB_FontRequester_Effects)
If Resultat
    Message$ = "Vous avez sélectionné la police suivante :"  + #LF$
    Message$ + "Nom :  " + SelectedFontName()       + #LF$
    Message$ + "Taille :  " + Str(SelectedFontSize())  + #LF$
    Message$ + "Couleur : " + Str(SelectedFontColor()) + #LF$
    If SelectedFontStyle() & #PB_Font_Bold
      Message$ + "Gras" + #LF$
    EndIf
    If SelectedFontStyle() & #PB_Font_StrikeOut
      Message$ + "Barré" + #LF$
    EndIf
    If SelectedFontStyle() & #PB_Font_Underline
      Message$ + "Souligné" + #LF$
    EndIf
  Else
    Message$ = "La sélection a été annulée."
  EndIf
 
  MessageRequester("FontRequester", Message$, #PB_MessageRequester_Ok)

A+

Re: LoadFont

Publié : mer. 03/mars/2010 12:32
par SPH
Donc, vous etes en train de me confirmer qu'on ne peux pas utiliser une fonte sauvegardé dans le repertoire du programme que l'on est en train de coder ? Donc, utiliser une fonte en local n'est pas possible, je ne suis pas fou ?

Peut etre avais je naturellement compris que PB regardait le repertoire courant pour voir si la fonte etait la avant de regarder si elle est dans windows/font... (apres coup, je me suis dit ca)

Re: LoadFont

Publié : mer. 03/mars/2010 23:05
par PAPIPP
Bonjour SPH
Je suis tout à fait d'accord .il faut que la police soit installée
A+
PP

Re: LoadFont

Publié : jeu. 04/mars/2010 9:45
par kelebrindae
Euh, ben moi, je suis tout-à-fait pas d'accord. :wink:

Je m'explique: dans le programme sur lequel je bosse actuellement, je crois que je fais exactement ce que tu veux faire (si j'ai bien compris): j'ai dans le répertoire de travail de mon .exe une police de caractères qui n'est pas installée dans Windows, je la charge au début de mon code, et je peux l'utiliser ensuite avec des DrawText.

Je te file la portion de code qui fait le chargement:

Code : Tout sélectionner

  AddFontResource_(GetCurrentDirectory()+"amstrad-accent.fnt")
  SendMessage_(#HWND_BROADCAST, #WM_FONTCHANGE, 0, 0)
  FontID1 = LoadFont(0,"Amstrad CPC accents",8)
(le fichier ".fnt" est dans le même répertoire que le source .pb)

Tu remarqueras que le LoadFont est fait sur le nom "en clair" de la fonte, et non sur le nom du fichier.
De plus, le premier paramètre de LoadFont doit être "0", et non "#PB_any"; sinon ça ne marche pas (chez moi, en tout cas).

Mais c'est vrai que c'est assez sensible; il ne faut pas grand-chose pour que ça ne marche plus... :|

Re: LoadFont

Publié : jeu. 04/mars/2010 10:36
par kernadec
bonjour kelebrindae
merci pour l'astuce c'est vrai,
mais, il faut faire attention avec AddFontRessource_() on doit ecrire "le chemin et nom du fichier fonte.ttf"
tandis qu'avec LoadFont, il faut utiliser le "nom de la police".
on peut mettre avec Loadfont 1,2,3,4 etc.. car ça marche sur ma machine avec XP.
et ajouter qu'il y a l'inverse de la commande avec RemoveFontRessource_

Cordialement

Code : Tout sélectionner

;http://cooltext.com/Download-Font-Andalus
AddFontResource_("c:\purebasic\andlso.ttf")
SendMessage_(#HWND_BROADCAST, #WM_FONTCHANGE, 0, 0)
LoadFont(2,"andalus",24)
LoadFont(1,"Arial",24)
If OpenWindow(0, 100, 200, 300, 200, "2D Drawing Test")
	If CreateImage(0, 300, 200)
		If StartDrawing(ImageOutput(0))
		DrawingFont(FontID(2))
			DrawText(10,50,"FONTE ANDALUS")
			DrawingFont(FontID(1))
			DrawText(10,90,"FONTE ARIAL")
			StopDrawing()
		EndIf
	EndIf
	ImageGadget(0, 0, 0, 0, 0, ImageID(0))

	Repeat
		EventID = WaitWindowEvent() 
	Until EventID = #PB_Event_CloseWindow
EndIf


Re: LoadFont

Publié : jeu. 04/mars/2010 10:45
par Backup
heu ! moi j'ai répondu dans le cadre de PureBasic et de ses fonctions
qui oblige bien la fonte a etre déja installée !


si tu utilise les Apis windows , ok, mais qu'en est 'il sur Linux ,osX ?

bon bien sur apres tout , l'ideal serai de disposer d'un cross-compilateur , comme ça on ne se prendrai plus la tete :D

Merci pour l'astuce , je vais la mettre en conserve :)

Re: LoadFont

Publié : jeu. 04/mars/2010 11:08
par PAPIPP
Bonjour à tous
à SPH Dobro Kernadec et kelebrindae
Je viens de faire un essai avec les 2 API et une police qui n'est pas installée
les 2 API installent provisoirement la police
Exemple :

1) Choisissez une police non installée
2) Après reboot vous testez le programme suivant avec commentaire sur les 2 premières lignes
Vous ne trouvez pas la police dans le répertoire
3) Enlevez les commentaires sur les 2 premières lignes et lancez la compile pas de police
mais elle est utilisable

4) Replacez les commentaires et lancez la compile la police n'est plus utilisable

Code : Tout sélectionner

; AddFontResource_("c:\army hollow condensed.tff")

; SendMessage_(#HWND_BROADCAST, #WM_FONTCHANGE, 0, 0)
; FontID1 = LoadFont(0,"army hollow condensed",8)
Resultat = FontRequester("i:\indispensable\*", 0, #PB_FontRequester_Effects)
If Resultat
    Message$ = "Vous avez sélectionné la police suivante :"  + #LF$
    Message$ + "Nom :  " + SelectedFontName()       + #LF$
    Message$ + "Taille :  " + Str(SelectedFontSize())  + #LF$
    Message$ + "Couleur : " + Str(SelectedFontColor()) + #LF$
    If SelectedFontStyle() & #PB_Font_Bold
      Message$ + "Gras" + #LF$
    EndIf
    If SelectedFontStyle() & #PB_Font_StrikeOut
      Message$ + "Barré" + #LF$
    EndIf
    If SelectedFontStyle() & #PB_Font_Underline
      Message$ + "Souligné" + #LF$
    EndIf
  Else
    Message$ = "La sélection a été annulée."
  EndIf
 
  MessageRequester("FontRequester", Message$, #PB_MessageRequester_O
Conclusion : Les 2 premières lignes du PRG Installent provisoirement la police
A+

Re: LoadFont

Publié : jeu. 04/mars/2010 11:27
par gnozal

Re: LoadFont

Publié : jeu. 04/mars/2010 12:14
par kelebrindae
@Gnozal:
Oups! Je n'avais pas vu que tu avais déjà mis le code. Désolé... :oops: