Amuse toi bien : (j'ai fait ca en 20 minutes)
Le code renvoie à la ligne un texte en fonction d'une longueur en Pixel (facilement modifiable pour faire avec des caractères)
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
;
Procedure.s CreationTexte(Texte.s, Longueur.l, FontID)
Protected NewList Ligne.s()
Protected Image.l, Coupe.s, Caractere.s
; Pour compliquer, je ne limite pas en caractère mais en pixel
; Pour cela, j'utilise TextWidth( donc il faut un drawing
Image = CreateImage(#PB_Any, 10, 10)
StartDrawing(ImageOutput(Image))
DrawingFont(FontID)
; On commence la première ligne
AddElement(Ligne())
For n = 1 To Len(Texte) ; Pour tous les caractères
Caractere.s = Mid(Texte, n, 1)
Select Caractere
Case Chr(13)
; Je fais rien avec ca, un passage de ligne d'un éditeur de texte, c'est chr(13) + chr(10)
Case Chr(10) ; donc je m'occupe que du chr(10)
AddElement(Ligne()) ; on passe à la ligne suivante
Default ; Sinon, pour les autres caractères
Ligne() + Caractere ; J'ajoute le caractere à la ligne
If TextWidth(Ligne()) > Longueur ; Si le texte est trop long
For nn = Len(Ligne()) To 1 Step -1 ; On remonte au dernier espace
Caractere.s = Mid(Ligne(), nn, 1)
If Caractere = " " ; au premier espace
Coupe.s = Right(Ligne(), Len(Ligne()) - nn)
Ligne() = Left(Ligne(), nn)
AddElement(Ligne()) ; on passe à la ligne suivante
Ligne() = Coupe
Break
EndIf
If nn = 1 ; On n'a pas trouvé d'espace, donc le mot est trop long et ne rentre pas dans la ligne, donc on met un tiret
Caractere = Right(Ligne(), 1) ; on récupère le dernier caractère
Ligne() = Left(Ligne(), Len(Ligne()) - 1) + "-" ; on le remplace par un -
AddElement(Ligne()) ; on passe à la ligne suivante
Ligne() = Caractere
EndIf
Next
EndIf
EndSelect
Next
StopDrawing()
FreeImage(Image)
; On regroupe le texte
Texte = ""
ForEach Ligne()
If Texte <> ""
Texte + Chr(10) ; Le séparateur de ligne ici
EndIf
Texte + Ligne()
Next
ProcedureReturn Texte
EndProcedure
;- Début du programme
Restore ExempleDeTexte
For n = 1 To 7
Read Ligne.s
Texte.s + Ligne + Chr(10)
Next
;- Police par défaut de windows
FontID = GetStockObject_(#DEFAULT_GUI_FONT)
Texte = CreationTexte(Texte, 200, FontID)
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 320, 320, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
EditorGadget(0, 10, 10, 300, 300) ; une zone de texte
SetGadgetText(0, Texte)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
DataSection
ExempleDeTexte:
Data.s "PureBasic est un langage de programmation basé sur les règles du langage BASIC. Ses caractéristiques majeures sont :"
Data.s ""
Data.s "- Portabilité: PureBasic fonctionne actuellement pleinement sous Windows, AmigaOS et Linux."
Data.s "- Rapidité: PureBasic est un véritable compilateur qui produit des exécutables compacts et optimisés."
Data.s "- Simplicité: PureBasic utilise la syntaxe du langage BASIC, très répandue et simple à apprendre."
Data.s ""
Data.s "PureBasic a été conçu aussi bien pour les débutants que pour les programmeurs expérimentés. Nous avons consacré beaucoup de temps et d'efforts pour vous proposer un langage rapide, fiable et convivial. Malgré sa syntaxe de base simple et rapidement assimilable, les possibilités de PureBasic sont infinies, grâce à de nombreuses caractéristiques évoluées comme, entre autres, les pointeurs, structures, procédures, listes dynamiques, etc. Le programmeur expérimenté n'aura aucune difficulté à accéder aux structures du système d'exploitation et aux API's."
EndDataSection