j'ai fait un programme pour afficher des polices graphiques, mais ça n'affiche rien du tout !
Pouvez_vous m'aider ?
FontMapSystem.pbi
Code : Tout sélectionner
Global FontMapCount ;Compte les polices existantes
Enumeration
#AHG ;Alignement horizontal à gauche
#AHC ;Alignement horizontal centré
#AHD ;Alignement horizontal à droite
EndEnumeration
Enumeration
#AVH ;Alignement vertical en haut
#AVC ;Alignement vertical centré
#AVB ;Alignement vertical en bas
EndEnumeration
Structure FontMap
CoulFndTrans.l ;Couleur de fond transparente
CoulPP.l ;Couleur de premier plan variable
hauteur.w ;Hauteur globale
espLig.w ;espacement des lignes global
numx.w ;Numéro de champ en x
numy.w ;Numéro de champ en y
lenx.w ;largeur du champ
leny.w ;hauteur du champ
maxi.w[256] ;Réduction de la largeur
posx.w[256] ;Position x
posy.w[256] ;Position y
draw.l ;Adresse des sprites pour la délivrance
copy.l ;Adresse des sprites de sauvegarde
CoulAct.l ;Couleur actuelle des sprites de sortie
EndStructure
Global NewList FontMap.FontMap()
; Charger le fichier de police
ProcedureDLL FontMapLoad(NomFichier$)
;Charger le sprite et vérifier
SpriteID = LoadSprite(#PB_Any, NomFichier$)
If SpriteID = 0: ProcedureReturn #PB_Default: EndIf
;Ouvrir le fichier et vérifier
Longueur = Len(NomFichier$) - Len(GetExtensionPart(NomFichier$))
FileID = ReadFile(#PB_Any, Left(NomFichier$, Longueur) + "FONT")
If FileID = 0: FreeSprite(SpriteID): ProcedureReturn #PB_Default: EndIf
;Créer une nouvelle police et entrer des données dedans
LastElement(FontMap()): AddElement(FontMap())
FontMap()\CoulFndTrans = ReadLong(FileID )
FontMap()\CoulPP = ReadLong(FileID )
FontMap()\hauteur = ReadWord(FileID )
FontMap()\espLig = ReadWord(FileID )
FontMap()\numx = ReadWord(FileID )
FontMap()\numy = ReadWord(FileID )
FontMap()\lenx = ReadWord(FileID )
FontMap()\leny = ReadWord(FileID )
For y = 1 To FontMap()\numy
For x = 1 To FontMap()\numx
acode = ReadWord(FileID )
FontMap()\maxi[acode] = ReadWord(FileID )
FontMap()\posx[acode] = FontMap()\lenx * (x - 1)
FontMap()\posy[acode] = FontMap()\leny * (y - 1)
Next x
Next y
CloseFile(FileID)
;initialiser sortie Sprite
FontMap()\draw = SpriteID
TransparentSpriteColor(FontMap()\draw,FontMap()\CoulFndTrans)
;Initialiser Sprite Backup (si couleur de premier plan active)
If FontMap()\CoulPP <> #PB_Default
FontMap()\CoulAct = FontMap()\CoulPP
FontMap()\copy = CopySprite(FontMap()\draw, #PB_Any)
TransparentSpriteColor(FontMap()\copy,FontMap()\CoulPP)
EndIf
;Indexer la liste comme FontID
FontMapCount = ListSize(FontMap())
ProcedureReturn ListIndex(FontMap())
EndProcedure
ProcedureDLL FontMapCatch(Pos1,Pos2)
SpriteID = CatchSprite(#PB_Any, Pos1)
If SpriteID = 0: ProcedureReturn #PB_Default: EndIf
;Créer une nouvelle police et entrer des données dedans
LastElement(FontMap()): AddElement(FontMap())
FontPos=Pos2
FontMap()\CoulFndTrans = PeekL(FontPos):FontPos+4
FontMap()\CoulPP = PeekL(FontPos):FontPos+4
FontMap()\hauteur = PeekW(FontPos):FontPos+2
FontMap()\espLig = PeekW(FontPos):FontPos+2
FontMap()\numx = PeekW(FontPos):FontPos+2
FontMap()\numy = PeekW(FontPos):FontPos+2
FontMap()\lenx = PeekW(FontPos):FontPos+2
FontMap()\leny = PeekW(FontPos):FontPos+2
For y = 1 To FontMap()\numy
For x = 1 To FontMap()\numx
Debug FontPos
acode = PeekW(FontPos):FontPos+2
FontMap()\maxi[acode] = PeekW(FontPos):FontPos+2
FontMap()\posx[acode] = FontMap()\lenx * (x - 1)
FontMap()\posy[acode] = FontMap()\leny * (y - 1)
Next x
Next y
;initialiser sortie Sprite
FontMap()\draw = SpriteID
TransparentSpriteColor(FontMap()\draw,FontMap()\CoulFndTrans)
;Initialiser Sprite Backup (si couleur de premier plan active)
If FontMap()\CoulPP <> #PB_Default
FontMap()\CoulAct = FontMap()\CoulPP
FontMap()\copy = CopySprite(FontMap()\draw, #PB_Any)
TransparentSpriteColor(FontMap()\copy,FontMap()\CoulPP)
EndIf
;Listenindex comme retour de FontID
FontMapCount = ListSize(FontMap())
ProcedureReturn ListIndex(FontMap())
EndProcedure
; Déterminer la longueur du texte
ProcedureDLL FontMapWide(FontID, Texte$)
;FontID et Vérifier sélection
If FontID < 0 Or FontID >= FontMapCount: ProcedureReturn 0: EndIf
SelectElement(FontMap(), FontID)
;Calculer la largeur du texte
Quantite = Len(Texte$) - 1
For CharIndex = 0 To Quantite
ASCII = PeekB(@Texte$ + CharIndex) & $FF
If FontMap()\maxi[ASCII] = 0: Continue: EndIf
PosiX + FontMap()\maxi[ASCII] + FontMap()\hauteur
Next CharIndex
;Largeur du texte de sortie
ProcedureReturn PosiX - FontMap()\hauteur
EndProcedure
; déterminer hauteur du texte
ProcedureDLL FontMapHigh(FontID, Texte$)
;FontID et Vérifier sélection
If FontID < 0 Or FontID >= FontMapCount: ProcedureReturn 0: EndIf
SelectElement(FontMap(), FontID)
;Calculer la longueur du texte
Lignes = CountString(Texte$, #CR$) + 1
PosiY = Lignes * (FontMap()\leny + FontMap()\espLig)
;Hauteur du texte à la sortie
ProcedureReturn PosiY - FontMap()\espLig
EndProcedure
; texte de sortie
ProcedureDLL FontMapOutput(FontID, Texte$, PosiX, PosiY, Hori, Verti, RGB)
;FontID et Vérifier sélection
If FontID < 0 Or FontID >= FontMapCount: ProcedureReturn 0: EndIf
SelectElement(FontMap(), FontID)
;Recolorier Sprite (couleur de premier plan lorsqu'il est actif)
If FontMap()\CoulPP <> #PB_Default And FontMap()\CoulAct <> RGB
ClearScreen(RGB)
DisplayTransparentSprite(FontMap()\copy, 0, 0)
FontMap()\CoulAct = RGB: EndIf
;Police à l'écran
CompteurLigne = CountString(Texte$, #CR$) + 1
Select Verti
Case #AVH: OutPosiY = PosiY
Case #AVC: OutPosiY = PosiY - FontMapHigh(FontID, Texte$) >> 1
Case #AVB: OutPosiY = PosiY - FontMapHigh(FontID, Texte$)
EndSelect
For LineIndex = 1 To CompteurLigne
If CompteurLigne = 1: Ligne$ = Texte$: Else: Ligne$ = StringField(Texte$, LineIndex, #CR$): EndIf
Select Hori
Case #AHG: OutPosiX = PosiX
Case #AHC: OutPosiX = PosiX - FontMapWide(FontID, Ligne$) >> 1
Case #AHD: OutPosiX = PosiX - FontMapWide(FontID, Ligne$)
EndSelect
Quantite = Len(Ligne$) - 1
For CharIndex = 0 To Quantite
ASCII = PeekB(@Ligne$ + CharIndex) & $FF
If FontMap()\maxi[ASCII] = 0: Continue: EndIf
ClipSprite(FontMap()\draw, FontMap()\posx[ASCII], FontMap()\posy[ASCII], FontMap()\maxi[ASCII], FontMap()\leny)
DisplayTransparentSprite(FontMap()\draw, OutPosiX, OutPosiY)
OutPosiX + FontMap()\maxi[ASCII] + FontMap()\hauteur
Next CharIndex
OutPosiY + FontMap()\espLig + FontMap()\leny
Next LineIndex
EndProcedure
Code : Tout sélectionner
;---- Créer l'écran ----
InitSprite()
InitKeyboard()
UsePNGImageDecoder()
OpenScreen(1366, 768, 16, "Font-Machine")
;---- charger les polices ----
;NOUVEAU! Maintenant, l'extension de l'image bitmap avec l'État - donc, n'importe quel format graphique peut être utilisé,
;le fichier de données associé (*.Font) est automatiquement calculé en fonction du fichier d'image
IncludeFile "Include\FontMapSystem.pbi"
FontID1 = FontMapLoad("Fonts\094.png")
;---- boucle principale ----
Repeat
;ExamineMouse()
ExamineKeyboard()
ClearScreen(RGB(0,40,80))
FontMapOutput(FontID1, FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", Date()), 100, 340, #AHG, #AVB, 0)
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)