code à tester + devinette pour SPH

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
salutcava
Messages : 34
Inscription : lun. 10/juin/2013 12:01

Re: code à tester + devinette pour SPH

Message par salutcava »

Dobro a écrit : il semble que "fonte\lfFaceName =0" permette de n'afficher que les fontes presentes sans les doubles
C'etait deja le cas dans le code que j'ai posté et dans le code avec trie des multiples de graph100
Fonte\lfFaceName etait deja à 0.
Par contre si tu commentes la ligne fonte\lfCharSet = #DEFAULT_CHARSET , alors Fonte\lfCharSet = 0 , ce qui corresspond au character set : ANSI_CHARSET (c'est dans le msdn)
Cette modification a pour effet de ne pas lister toutes les polices. Et les polices listées ont un script associé unique , voila pourquoi elles apparaissent une seule fois.
Donc avec ta modification (une seule) : OUI il n'y a pas de multiples, mais NON il n'y a pas toutes les polices de listées (TrueType et OpenType manquantes).
(ps: pour le script associés à la police j'ai posté un message juste avant, mais pas sur de savoir a quoi ca corresspond exactement :p )
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: code à tester + devinette pour SPH

Message par Backup »

ha oui , je me disait bien que c'etait trop simple :)
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Re: code à tester + devinette pour SPH

Message par Huitbit »

Ca bosse dur ici !
SPH a écrit :Moi, j'aurais préféré une solution simple et sûre : utiliser une fonte mise dans le répertoire du programme que l'on code. Comme ça, on est sûr que la fonte existe.
Dobro a écrit :+100
c'est ce que j'aurais fait ! :)
distribuer la fonte avec !
Je crois que c'est le plus raisonnable !
SPH a écrit : Tiens, j'ai retrouvé le jeu maze of galious pc : http://www.braingames.getput.com/mog/
Il est très intéressant (changement de gfx ou de zik)
Pour ce que je prépare, le gameplay sera différent(jeu d'arcade)

Le bac arrive...les copies aussi :(

J'en suis pas encore au titre. Je fais le ménage dans les sprites et les animations.
J'essaye d'être un peu organisé :mrgreen:

Lentement mais sûrement...

Ciao !
Elevé au MSX !
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: code à tester + devinette pour SPH

Message par flaith »

Effectivement mon code est plus long car il repertorie toutes les tailles de chaque fonte et il permet aussi de n'afficher que les fontes de type 'monospace'. C'est un 'tout', il suffit juste de garder les fonctions necessaires.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: code à tester + devinette pour SPH

Message par flaith »

Pour afficher des fontes incluses dans le programme, voir ici : Embed font in an application

Petit programme d'exemple :

Code : Tout sélectionner

Global.i hFont

OpenLibrary(0,"gdi32.dll")
  hFont = CallFunction(0, "AddFontMemResourceEx", ?MyFont, ?EndSize - ?MyFont, 0, @"1")
CloseLibrary(0)

LoadFont(0, "Silubr", 12)

If hFont
  If OpenWindow(0, 0, 0, 300, 200, "Font from memory", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(0, 0,  0, 300, 200, "Purebasic with Font : Silubr.otf")
    SetGadgetFont(0, FontID(0))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
EndIf

DataSection
  MyFont: IncludeBinary "Silubr.otf"
  EndSize:
EndDataSection
ou avec CallFunctionFast :

Code : Tout sélectionner

Enumeration
  #LIB_GDI
  #FONT_MEM
EndEnumeration

Global.i hFont

If OpenLibrary(#LIB_GDI, "gdi32.dll")
  *AddFontMemResourceEx    = GetFunction(#LIB_GDI, "AddFontMemResourceEx")
  *RemoveFontMemResourceEx = GetFunction(#LIB_GDI, "RemoveFontMemResourceEx")
  CloseLibrary(#LIB_GDI)
Else
  End
EndIf

hFont = CallFunctionFast(*AddFontMemResourceEx, ?MyFont, ?EndSize - ?MyFont, 0, @"1")

If hFont
  LoadFont(#FONT_MEM, "Silubr", 24)
  If OpenWindow(0, 0, 0, 300, 200, "Font from memory", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    EditorGadget(0, 0,  0, 300, 200, #PB_Editor_WordWrap)
    AddGadgetItem(0, 0, "Purebasic with Font : Silubr.otf")
    SetGadgetFont(0, FontID(#FONT_MEM))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  CallFunctionFast(*RemoveFontMemResourceEx, hFont)
EndIf

DataSection
  MyFont: IncludeBinary "Silubr.otf"
  EndSize:
EndDataSection
Version sans LoadFont :

Code : Tout sélectionner

Enumeration
  #LIB_GDI
  #FONT_MEM
EndEnumeration

Global.i hFont

If OpenLibrary(#LIB_GDI, "gdi32.dll")
  *AddFontMemResourceEx    = GetFunction(#LIB_GDI, "AddFontMemResourceEx")
  *RemoveFontMemResourceEx = GetFunction(#LIB_GDI, "RemoveFontMemResourceEx")
  CloseLibrary(#LIB_GDI)
Else
  End
EndIf

hFont = CallFunctionFast(*AddFontMemResourceEx, ?MyFont, ?EndSize - ?MyFont, 0, @"1")

If hFont
  ID = CreateFont_(24, 0, 0, 0, 0, #False, #False, #False,
                   #DEFAULT_CHARSET, #OUT_RASTER_PRECIS, #CLIP_DEFAULT_PRECIS,
                   #ANTIALIASED_QUALITY, #FIXED_PITCH + #FF_DONTCARE, "Silubr")

  If OpenWindow(0, 0, 0, 300, 200, "Font from memory", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    EditorGadget(0, 0,  0, 300, 200, #PB_Editor_WordWrap)
    AddGadgetItem(0, 0, "Purebasic with Font : Silubr.otf")
    SendMessage_(GadgetID(0), #WM_SETFONT, ID, #True)

    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  CallFunctionFast(*RemoveFontMemResourceEx, hFont)
EndIf

DataSection
  MyFont: IncludeBinary "Silubr.otf"
  EndSize:
EndDataSection
et une derniere, plus elegante :

Code : Tout sélectionner

Import "gdi32.lib"
  AddFontMemResourceEx_(pbFont,       	                            ; font resource
                        cbFont,       	                            ; number of bytes in font resource 
                        pdv,          	                            ; Reserved. Must be 0.
                        *pcFonts) As "_AddFontMemResourceEx"      	; number of fonts installed
  RemoveFontMemResourceEx_(hFont) As "_RemoveFontMemResourceEx"
EndImport

Enumeration
  #FONT_MEM
EndEnumeration

Global.i hFont

hFont = AddFontMemResourceEx_(?MyFont, ?EndSize - ?MyFont, 0, @"1")

If hFont
  LoadFont(#FONT_MEM, "Silubr", 24)
  If OpenWindow(0, 0, 0, 300, 200, "Font from memory", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    EditorGadget(0, 0,  0, 300, 200, #PB_Editor_WordWrap)
    AddGadgetItem(0, 0, "Purebasic with Font : Silubr.otf")
    SetGadgetFont(0, FontID(#FONT_MEM))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  RemoveFontMemResourceEx_(hFont)
EndIf

DataSection
  MyFont: IncludeBinary "Silubr.otf"
  EndSize:
EndDataSection
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: code à tester + devinette pour SPH

Message par graph100 »

Magnifique !

Dommage qu'une méthode multi-platforme ne soit pas disponible dans PureBasic. Pour un logiciel/Jeu utilisant des fonts perso c'est quand même plus simple de les inclure directement (à moins de pouvoir les installer sur chaque os).
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre