Page 1 sur 2
Re: LoadFont
Publié : jeu. 25/févr./2010 14:29
par gnozal
SPH a écrit :Vivement la lectures de fontes locales alors
Deux possibilités (Windows)
Code : Tout sélectionner
;
; Load Font From DataSection
;
Import "User32.lib"
;Windows NT/2000/XP/Vista: Included in Windows 2000 And later.
;Windows 95/98/Me: Unsupported.
AddFontMemResourceEx(pFont,Size,Par,Count)
RemoveFontMemResourceEx(fHandle)
EndImport
Global fHandle.l,Fonts.l
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "Mein Font", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
fHandle = AddFontMemResourceEx(?MyFont,?EndOfMyFont-?MyFont,0,@Fonts)
LoadFont(1,"Digiface",14)
ButtonGadget(0, 10,10,80,24,"12345")
SetGadgetFont(0,FontID(1))
EndIf
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0:
RemoveFontMemResourceEx(fHandle)
SendMessage_(WindowID(0),#WM_CLOSE,0,0)
EndSelect
EndSelect
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
EndIf
End
DataSection
MyFont:
IncludeBinary "Digiface.ttf"
EndOfMyFont:
EndDataSection
Code : Tout sélectionner
;
; AddFontResource
;
EnableExplicit
Define Result.l
Define i.l
Result = AddFontResource_("DIMITRI_.TTF")
SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0)
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
EditorGadget(0, 8, 8, 306, 133)
For i = 0 To 5
AddGadgetItem(0,i,"Line "+Str(i))
Next
SetGadgetFont(0,LoadFont(0,"DIMITRI",10))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
RemoveFontResource_("DIMITRI_.TTF")
SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0)
Re: LoadFont
Publié : jeu. 25/févr./2010 14:38
par Fred
C'est pourtant documenté:
http://www.purebasic.com/french/documen ... dfont.html
Sous Microsoft Windows, le gestionnaire de police de caractères essaiera toujours de trouver une police équivalente à celle demandée, si cette dernière n'est pas disponible. Par exemple, si vous essayez de charger la police "Tim Now Ronin" et qu'elle n'existe pas, une autre police sera chargée automatiquement, en fonction de sa taille, du style etc. Il est donc peu probable que cette commande échoue.
Re: LoadFont
Publié : jeu. 25/févr./2010 14:40
par SPH
Fred a écrit :C'est pourtant documenté:
http://www.purebasic.com/french/documen ... dfont.html
Sous Microsoft Windows, le gestionnaire de police de caractères essaiera toujours de trouver une police équivalente à celle demandée, si cette dernière n'est pas disponible. Par exemple, si vous essayez de charger la police "Tim Now Ronin" et qu'elle n'existe pas, une autre police sera chargée automatiquement, en fonction de sa taille, du style etc. Il est donc peu probable que cette commande échoue.
Et bien ca ne marche pas (mais je retesterais)
PS fred: avant de poster, j'avais testé toutes les possibilités mais ca n'a pas marché.
Re: LoadFont
Publié : jeu. 25/févr./2010 14:42
par gnozal
SPH a écrit :Fred a écrit :C'est pourtant documenté:
http://www.purebasic.com/french/documen ... dfont.html
Sous Microsoft Windows, le gestionnaire de police de caractères essaiera toujours de trouver une police équivalente à celle demandée, si cette dernière n'est pas disponible. Par exemple, si vous essayez de charger la police "Tim Now Ronin" et qu'elle n'existe pas, une autre police sera chargée automatiquement, en fonction de sa taille, du style etc. Il est donc peu probable que cette commande échoue.
Et bien ca ne marche pas (mais je retesterais)
???
C'est pourtant la description de ton "bug"
Re: LoadFont
Publié : jeu. 25/févr./2010 15:52
par SPH
j'ai testé plusieurs fois avec plusieurs fontes differentes mais je retesterais sur mes 2 ordis avec differentes fontes de differents formats
Re: LoadFont
Publié : ven. 26/févr./2010 1:36
par kernadec
bonsoir SPH
je connais pas cette fonte, je n'ai pas vista, mais sous XP,
c'est peut être un truc simple du genre le nom de la police....
il faut aller dans le répertoire des fontes c:\Windows\fonts
et respecter scrupuleusement le nom de la fonte inscrit dans l'onglet "Nom de la police"
exemple : pour la fonte WINGDING.TTF si on écrit LoadFont(0,"WINGDING",24)
elle ne fonctionne pas, Mais avec le nom de la police : LoadFont(0,"WingDings",24) c'est bon.
sinon, c'est peut être un problème de copyright.
Cordialement
Re: LoadFont
Publié : ven. 26/févr./2010 11:06
par Backup
si tu utilise Japbe , l'outil "Table ASCII" donne aussi le vrais nom des fontes intallées

Re: LoadFont
Publié : mar. 02/mars/2010 13:14
par SPH
Non, ca ne marche vraiment pas. J'ai tout essayé et je me retrouve invariablement avec du arial.
J'ai essayé pleins de fontes avec toutes ces possibilités :
LoadFont(1,"Andalus",50)
LoadFont(1,"d:\jeu\Andalus",50)
LoadFont(1,"d:\jeu\andiso.fft,50)
pareil avec plusieurs autres fontes... (que je prenne le vrai nom ou le nom de fichier, ca ne marche que si la fonte est dans windows/fonts ET que windows la reconnait !
Re: LoadFont
Publié : mar. 02/mars/2010 13:41
par Backup
SPH a écrit : (que je prenne le vrai nom ou le nom de fichier, ca ne marche que si la fonte est dans windows/fonts ET que windows la reconnait !
ben oui il faut que ta fonte soit présente et installé sur le systeme d'exploitation...

Re: LoadFont
Publié : mar. 02/mars/2010 15:27
par kernadec
bonjour SHP
je suis sous xp, j'ai téléchargé la fonte "andalus" sur le site suivant:
http://cooltext.com/Download-Font-Andalus
testée avec le code suivant elle fonctionne sur XP.
Cordialement
Code : Tout sélectionner
;http://cooltext.com/Download-Font-Andalus
LoadFont(0,"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(0))
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é : mar. 02/mars/2010 18:02
par venom
Le code de kernadec fonctionne très bien sur mon seven
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.
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...
