Code: Select all
; Code created by Dieppedalle David on 23/08/2021.
; Current Version: 1.00.01.
; First version: 1.00.00 on 23/08/2021.
; Version: 1.00.01 on 24/08/2021 > Adds code to free the fonts used to draw the text.
EnableExplicit
; Structure qui contient les propriétées de tous les mots.
Structure Text
Text.s
Font.s
FontID.i
Style.i
Size.i
Color.i
ColorBackround.i
X.i
Y.i
Width.i
WidthVectorTextVisible.i
Height.i
HeightVectorTextVisible.i
HeightVectorTextBaseline.i
EndStructure
; Structure qui contient les propriétées de chaque ligne du texte.
Structure Line
LineX.i
LineY.i
NextPositionX.i
NextPositionY.i
LineWidth.i
LineHeight.i
Array Location.Text(0)
EndStructure
; Structure qui contient les propriétées du texte.
Structure MyText
Array Line.Line(0)
Interline.i
EndStructure
; Tableau qui contient tous les Textes, chaque élément est un Texte.
Global Dim VectorTextGadget.MyText(0)
; Image de test déstiner pour les oppérations de calcules du Texte.
Global ImageTest.i = CreateImage(#PB_Any, 1000, 1000, 32, #PB_Image_Transparent)
; VectorTextNumber.i commence à partir de 1.
; VectorTextNumber.i ne dois pas être supérieur au nombre d'élément +1 dans le tableau.
; Utilisez #PB_Any pour automatiquement augmenter de +1 le nombre d'élément dans le tableau.
; Retourne si tous c'est bien passé, VectorTextNumber + 1, Sinon 0.
;
; VectorTextNumber.i starts from 1.
; VectorTextNumber.i must Not be greater than the number of elements +1 in the Array.
; Use #PB_Any To automatically increase by +1 the number of elements in the Array.
; Return If all went well, VectorTextNumber + 1, Else 0.
Procedure.i AddVectorText(VectorTextNumber.i, Text.s, Font.s = "", Style.i = 0, Size.i = 12, Color.i = -16777216, ColorBackround.i = -1)
; Vériffications diverses.
If VectorTextNumber.i = #PB_Any
If ArraySize(VectorTextGadget()) = 0
VectorTextNumber.i = 1
ElseIf ArraySize(VectorTextGadget()) > 0
VectorTextNumber.i = ArraySize(VectorTextGadget()) + 1
EndIf
ReDim VectorTextGadget(ArraySize(VectorTextGadget()) + 1)
ElseIf VectorTextNumber.i <= 0
Debug "AddVectorText >>> VectorTextNumber.i est inférieur ou égale à 0, dois être 1 minimum !"
ProcedureReturn #False
ElseIf VectorTextNumber.i = ArraySize(VectorTextGadget()) + 1
VectorTextNumber.i = ArraySize(VectorTextGadget()) + 1
ReDim VectorTextGadget(ArraySize(VectorTextGadget()) + 1)
ElseIf VectorTextNumber.i > ArraySize(VectorTextGadget()) + 1
Debug "AddVectorText >>> VectorTextNumber.i est supérieur au nombre d'élément +1 dans le tableau, le tableau contient (" + Str(ArraySize(VectorTextGadget()) + 1) + " élément(s)) !"
ProcedureReturn #False
EndIf
If Size.i < 6
Size.i = 6
ElseIf Size.i > 500
Size.i = 500
EndIf
; Chargement de la police.
Define FontID.i = LoadFont(#PB_Any, Font.s, Size.i, Style.i | #PB_Font_HighQuality)
; Récuperer le nombre de lignes et de mots que contienent les tableaux Line() et Location().
Define LineNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line())
Define LocationNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\Location())
; Racourcis.
With VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\Location(LocationNumber.i)
; Si l'image est initialisé.
If IsImage(ImageTest.i)
; Si ont peux dessiné sur l'image.
If StartVectorDrawing(ImageVectorOutput(ImageTest.i))
; Utilise le Font pour écrire le texte.
VectorFont(FontID(FontID.i))
; Enregistrement de la largeur et hauteur du texte.
\Width = Round(VectorTextWidth(Text.s), #PB_Round_Up) ; Largeur
\Height = Round(VectorTextHeight(Text.s), #PB_Round_Up) ; Hauteur
; Enregistrement de la largeur et de la hauteur du texte visible ainsi que la hauteur de la base du texte.
\WidthVectorTextVisible = Round(VectorTextWidth(Text.s, #PB_VectorText_Visible), #PB_Round_Up) ; Largeur Visible.
\HeightVectorTextVisible = Round(VectorTextHeight(Text.s, #PB_VectorText_Visible), #PB_Round_Up) ; Hauteur Visible
\HeightVectorTextBaseline = Round(VectorTextHeight(Text.s, #PB_VectorText_Baseline), #PB_Round_Up) ; Hauteur depuis la base de la ligne du texte.
; Si la hauteur de la ligne du texte est plus petite que la hauteur du texte
; Alors définie et enregistre la hauteur de la ligne depuis la hauteur du texte.
If VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineHeight < \Height
VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineHeight = \Height + 2.00000000
EndIf
EndIf
; Sinon si l'image n'est pas initialisé.
ElseIf Not IsImage(ImageTest.i)
Debug "ImageTest n'est pas initialisé !"
ProcedureReturn #False
EndIf
\X = VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\NextPositionX ; Enregistre la prochaine position X du mot depuis NextPositionX.i.
; NextPositionX.i va sauvegarder la position en X, ce sera très utile pour écrire les prochain mots à la suite des autres.
VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\NextPositionX + \Width ; Ajoute dans NextPositionX.i, la largeur du mot.
; Si la couleur de texte est égale à 0.
If Color.i = 0
\Color = RGBA(0, 0, 0, 255) ; Alors ont la change et ont enregistre la couleur en noir opaque, car 0 est égale à noir totalement transparent.
Else
\Color = Color.i ; Sinon ont ce contente d'enregistrer la couleur du texte.
EndIf
\Text = Text.s ; Le texte du mots.
\Font = Font.s ; Le nom de la police du texte du mots.
\FontID = FontID.i ; Le Font utiliser pour le texte du mots.
\Style = Style.i ; Le texte du mots.
\ColorBackround = ColorBackround.i ; La couleur d'arrière plant du texte du mots.
\Size = Size.i ; La taille du texte du mots.
; Ont ajoute un élément dans le tableau Location() pour le prochain mot.
ReDim VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\Location(LocationNumber.i + 1)
EndWith
ProcedureReturn VectorTextNumber.i + 1
EndProcedure
; VectorTextNumber.i commence à partir de 1.
; VectorTextNumber.i ne dois pas être supérieur au nombre d'élément +1 dans le tableau.
; Va sur la prochaine ligne (Ajoute une nouvelle ligne).
; Retourne si tous c'est bien passé, le nombre de ligne totale (Avec la nouvelle), Sinon 0..
;
; VectorTextNumber.i starts from 1.
; VectorTextNumber.i must Not be greater than the number of element +1 in the Array.
; Go To the Next Line (Add a new line).
; Return If all is well, the number of total Line (With the new one), Else 0.
Procedure.i AddVectorTextNewLine(VectorTextNumber.i)
; Vériffications diverses.
If VectorTextNumber.i <= 0
Debug "CreateImageVectorText >>> VectorTextNumber.i est inférieur ou égale à 0, dois être 1 minimum !"
ProcedureReturn #False
ElseIf VectorTextNumber.i = ArraySize(VectorTextGadget()) + 1
Debug "CreateImageVectorText >>> VectorTextNumber.i est le dernier élément du tableau qui est vide, le tableau contient (" + Str(ArraySize(VectorTextGadget()) + 1) + " élément(s)) !"
ProcedureReturn #False
ElseIf VectorTextNumber.i > ArraySize(VectorTextGadget()) + 1
Debug "CreateImageVectorText >>> VectorTextNumber.i est supérieur au nombre d'élément +1 dans le tableau, le tableau contient (" + Str(ArraySize(VectorTextGadget()) + 1) + " élément(s)) !"
ProcedureReturn #False
EndIf
; Récuperer le nombre de lignes que contient le tableau Line().
Define LineNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line())
; Ont ajoute un élément dans le tableau Line() pour la prochaine ligne.
ReDim VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i + 1)
; Définie et enregistre la position Y de la prochaine ligne, depuis la position Y et la hauteur de la ligne actuel.
VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i + 1)\LineY = VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineY + VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineHeight + VectorTextGadget(VectorTextNumber.i)\Interline
; Définie et enregistre la hauteur de la prochaine ligne.
VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i + 1)\LineHeight = 10
; ; Initialise les valeur pour le premier mot de la ligne.
; With VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i + 1)\Location(0)
;
; \Color.i = 0 ; La couleur du mot.
; \Text = " " ; Le texte du mots.
; \Font = "" ; Le nom de la police du texte du mots.
; \Style = 0 ; Le style du texte du mots.
; \FontID = LoadFont(#PB_Any, "", 10, #PB_Font_HighQuality) ; Le Font utiliser pour le texte du mots.
; \ColorBackround = RGBA(255, 255, 255, 255) ; La couleur d'arrière plant du texte du mots.
; \Size = 10 ; La taille du texte du mots.
;
; ; Si l'image est initialisé.
; If IsImage(ImageTest.i)
;
; ; Si ont peux dessiné sur l'image.
; If StartVectorDrawing(ImageVectorOutput(ImageTest.i))
;
; ; Utilise le Font pour écrire le texte.
; VectorFont(FontID(\FontID))
;
; ; Enregistrement de la largeur et hauteur du texte.
; \Width = Round(VectorTextWidth(" "), #PB_Round_Up) ; Largeur
; \Height = Round(VectorTextHeight(" "), #PB_Round_Up) ; Hauteur
;
; ; Enregistrement de la largeur et de la hauteur du texte visible ainsi que la hauteur de la base du texte.
; \WidthVectorTextVisible = Round(VectorTextWidth(" ", #PB_VectorText_Visible), #PB_Round_Up) ; Largeur Visible.
; \HeightVectorTextVisible = Round(VectorTextHeight(" ", #PB_VectorText_Visible), #PB_Round_Up) ; Hauteur Visible
; \HeightVectorTextBaseline = Round(VectorTextHeight(" ", #PB_VectorText_Baseline), #PB_Round_Up) ; Hauteur depuis la base de la ligne du texte.
;
; EndIf
;
; ; Sinon si l'image n'est pas initialisé.
; ElseIf Not IsImage(ImageTest.i)
; Debug "ImageTest n'est pas initialisé !"
; ProcedureReturn #False
;
; EndIf
;
; EndWith
; Réinitialise NextPositionX.i à 0 car nous changeont de ligne !
VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\NextPositionX.i = 0
; Ajoute dans NextPositionY.i la hauteur de la ligne actuel.
VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\NextPositionY.i + VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineHeight + VectorTextGadget(VectorTextNumber.i)\Interline
ProcedureReturn LineNumber.i + 1
EndProcedure
; VectorTextNumber.i commence à partir de 1.
; VectorTextNumber.i ne dois pas être supérieur au nombre d'élément +1 dans le tableau.
; Après avoir ajouter du texte, créer et renvoie l'image du texte construit, Sinon 0..
;
; VectorTextNumber.i starts from 1.
; VectorTextNumber.i must Not be greater than the number of element +1 in the Array.
; After adding text, create And Return the image of the constructed text, Else 0.
Procedure.i CreateImageVectorText(VectorTextNumber.i)
Define IndexLineArray.i ; Index de ligne.
Define IndexLocationArray.i ; Index de mots.
Define LineWidth.i ; La largeur de la ligne en court d'inspection.
Define LineLargest.i ; La ligne de texte la plus grande.
Define TextHeight.i ; La hauteur totale du texte.
; Vériffications diverses.
If VectorTextNumber.i <= 0
Debug "CreateImageVectorText >>> VectorTextNumber.i est inférieur ou égale à 0, dois être 1 minimum !"
ProcedureReturn #False
ElseIf VectorTextNumber.i = ArraySize(VectorTextGadget()) + 1
Debug "CreateImageVectorText >>> VectorTextNumber.i est le dernier élément du tableau qui est vide, le tableau contient (" + Str(ArraySize(VectorTextGadget()) + 1) + " élément(s)) !"
ProcedureReturn #False
ElseIf VectorTextNumber.i > ArraySize(VectorTextGadget()) + 1
Debug "CreateImageVectorText >>> VectorTextNumber.i est supérieur au nombre d'élément +1 dans le tableau, le tableau contient (" + Str(ArraySize(VectorTextGadget()) + 1) + " élément(s)) !"
ProcedureReturn #False
EndIf
; Récuperer le nombre de lignes que contienent le tableaux Line().
Define LineNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line())
Define LocationNumber.i = 0 ; Variable pour compter le nombre de mots que contienent le tableau Location() de la ligne actuellement inspecté.
; Variables pour calculer la position Y de justification du mot.
Define LocationHeightTextBaselineMaxi.i ; La hauteur maximal des mots depuis leur base, seule le mot le plus grand en hauteur sera retenue.
; Racourcis
With VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\Location(IndexLocationArray.i)
; Boucle For pour chaque ligne.
; Calcule et Ajuste la position Y des mots.
For IndexLineArray.i = 0 To LineNumber.i
; Récuperer le nombre de mots que contienent le tableau Location() de la ligne actuel.
LocationNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\Location())
LocationHeightTextBaselineMaxi.i = 0 ; Réinitialise la hauteur du mot maximal à chaque nouvelle ligne.
; Boucle For pour chaque mot de la ligne.
; Récuperation des valeurs de hauteur du mot le plus grand en hauteur.
For IndexLocationArray.i = 0 To LocationNumber.i - 1
; Récupere la hauteur maximal des mots depuis leur base.
If LocationHeightTextBaselineMaxi.i < \HeightVectorTextBaseline
LocationHeightTextBaselineMaxi.i = \HeightVectorTextBaseline
EndIf
Next
; Boucle For pour chaque mot de la ligne.
; Corrige la position Y des mots pour les alignier par apport à leur base.
For IndexLocationArray.i = 0 To LocationNumber.i - 1
; Si la hauteur de la base du mot actuel est plus petite que la base du mot le plus grand enregistré.
If \HeightVectorTextBaseline < LocationHeightTextBaselineMaxi.i
; Ajuste la position Y du mot actuel pour l'aligné par apport au mot le plus grand en hauteur.
\Y = (LocationHeightTextBaselineMaxi.i - \HeightVectorTextBaseline)
EndIf
Next
Next
; Boucle For pour chaque ligne.
; Récupere la ligne la plus grande.
For IndexLineArray.i = 0 To LineNumber.i
; Récuperer le nombre de mots que contienent le tableau Location() de la ligne actuel.
LocationNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\Location())
; Boucle For pour chaque mot de la ligne.
; Calcule de la largeur de la ligne.
For IndexLocationArray.i = 0 To LocationNumber.i - 1
LineWidth.i = \X + \Width ; LineWidth.i sera ingrémenté en taille à chaque mot.
Next
; Si la largeur totale de la ligne est plus petite que la valeur enregistré.
If LineLargest.i < LineWidth.i
LineLargest.i = LineWidth.i ; Enregistre la largeur de la ligne.
EndIf
Next
; Récupere la position ainsi que la taille de la dernière ligne + l'interligne.
TextHeight.i = VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineY + VectorTextGadget(VectorTextNumber.i)\Line(LineNumber.i)\LineHeight + VectorTextGadget(VectorTextNumber.i)\Interline
; Création de l'image du texte.
Define ImageTexte.i = CreateImage(#PB_Any, LineLargest.i, TextHeight.i, 32, #PB_Image_Transparent)
;VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\Location(IndexLocationArray.i)
; Si l'image est initialisé.
If IsImage(ImageTexte.i)
Define DrawNextPositionX.i = 0
Define DrawNextPositionY.i = 0
; Boucle For pour chaque ligne.
For IndexLineArray.i = 0 To LineNumber.i
DrawNextPositionX.i = VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\LineX
DrawNextPositionY.i = VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\LineY
; Récuperer le nombre de mots que contienent le tableau Location() de la ligne actuel.
LocationNumber.i = ArraySize(VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\Location())
; Boucle For pour chaque mot de la ligne actuel.
For IndexLocationArray.i = 0 To LocationNumber.i - 1
If \Text > ""
; Si ont peux dessiner sur l'image.
If StartVectorDrawing(ImageVectorOutput(ImageTexte.i))
; Utilise le font.
VectorFont(FontID(\FontID))
; Définie la couleur du font du texte.
VectorSourceColor(\ColorBackround)
; Dessine le font du texte avec la couleur du font du texte.
AddPathBox(DrawNextPositionX.i + \X, DrawNextPositionY.i, \Width, VectorTextGadget(VectorTextNumber.i)\Line(IndexLineArray.i)\LineHeight)
FillPath(#PB_Path_Preserve)
; Dessine le texte.
MovePathCursor(DrawNextPositionX.i + \X, DrawNextPositionY.i + \Y + 0.5 + 2.00000000)
VectorSourceColor(\Color)
DrawVectorText(\Text)
StopVectorDrawing()
EndIf
EndIf
Next
Next
; Sinon si l'image n'est pas initialié.
Else
Debug "Imag n'est pas initialisé !"
ProcedureReturn #False
EndIf
Define FreeFont.i = 0
For IndexLineArray.i = 0 To LineNumber.i
For IndexLocationArray.i = 0 To LocationNumber.i - 1
If IsFont(\FontID)
FreeFont(\FontID)
EndIf
Next
Next
EndWith
ProcedureReturn ImageTexte.i
EndProcedure
DisableExplicit
; --------------------------Exemple----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Enumeration 1
#Window
#MyCanvasGadget
EndEnumeration
Enumeration 1
#MyText1
#MyText2
#MyText3
EndEnumeration
If OpenWindow(#Window, 0, 0, 800, 600, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#MyCanvasGadget, 0, 0, 800, 600)
;{ Create Text
AddVectorText(#MyText1, "This ", "Arial", 0, 12, 0, RGBA(0, 255, 0, 255))
AddVectorText(#MyText1, "Is ", "Cambria", #PB_Font_Underline, 20, RGBA(255, 0, 0, 255), RGBA(255, 200, 0, 255))
AddVectorText(#MyText1, "A ", "Times New Roman", #PB_Font_StrikeOut, 40, RGBA(255, 0, 255, 255), RGBA(0, 0, 255, 255))
AddVectorText(#MyText1, "Text ", "Courier New", #PB_Font_Italic | #PB_Font_Bold, 16, RGBA(0, 0, 255, 255), RGBA(200, 200, 200, 255)) ; Manorly
AddVectorText(#MyText1, "multi-content", "Verdana", #PB_Font_Underline | #PB_Font_StrikeOut | #PB_Font_Italic, 24, RGBA(255, 200, 0, 255), RGBA(0, 0, 0, 255)) ; Manorly
MyImageVectorTexte1.i = CreateImageVectorText(#MyText1)
AddVectorText(#MyText2, "The fox", "Arial", #PB_Font_Bold | #PB_Font_Underline, 17, RGBA(255, 130, 0, 255), RGBA(255, 255, 255, 255))
AddVectorTextNewLine(#MyText2)
AddVectorTextNewLine(#MyText2)
AddVectorText(#MyText2, "Fox ", "Cambria", #PB_Font_Bold, 12, RGBA(255, 0, 0, 255), RGBA(255, 255, 255, 255))
AddVectorText(#MyText2, "is an ambiguous term that most often refers to ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), RGBA(255, 255, 255, 255))
AddVectorText(#MyText2, "Canids", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), RGBA(255, 255, 255, 255))
AddVectorText(#MyText2, " of the", "Cambria", 0, 10, RGBA(0, 0, 0, 255), RGBA(255, 255, 255, 255))
AddVectorTextNewLine(#MyText2)
AddVectorText(#MyText2, "genus Vulpes, the most common being the ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), RGBA(255, 255, 255, 255))
AddVectorText(#MyText2, "Red Fox ", "Cambria", #PB_Font_Italic, 10, RGBA(255, 0, 0, 255), RGBA(255, 255, 255, 255))
AddVectorText(#MyText2, "(Vulpes vulpes).", "Cambria", 0, 10, RGBA(0, 0, 0, 255), RGBA(255, 255, 255, 255))
AddVectorTextNewLine(#MyText2)
AddVectorTextNewLine(#MyText2)
AddVectorText(#MyText2, "However, by physical similarity, the term is also used to", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorTextNewLine(#MyText2)
AddVectorText(#MyText2, "designate ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorText(#MyText2, "Canids ", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorText(#MyText2, "belonging to other genera such As:", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorTextNewLine(#MyText2)
AddVectorText(#MyText2, "Atelocynus", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorText(#MyText2, ", ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorText(#MyText2, "Cerdocyon", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorText(#MyText2, ", ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorText(#MyText2, "Dusicyon", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorText(#MyText2, ", ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorText(#MyText2, "Otocyon", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorText(#MyText2, ", ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorText(#MyText2, "Lycalopex", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorText(#MyText2, " And, ", "Cambria", 0, 10, RGBA(0, 0, 0, 255), 0)
AddVectorText(#MyText2, "Urocyon.", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 255), 0)
AddVectorTextNewLine(#MyText2)
AddVectorTextNewLine(#MyText2)
AddVectorText(#MyText2, " You will not see this text because it is invisible ! ", "Cambria", #PB_Font_Underline, 10, RGBA(0, 0, 255, 0), RGBA(255, 200, 0, 255))
MyImageVectorTexte2.i = CreateImageVectorText(#MyText2)
For Line.i = 1 To 14
For Letter.i = 1 To 100
AddVectorText(#MyText3, Chr(Random(122, 97)), "Belwe Lt BT", 0, Random(12, 8), RGBA(Random(255), Random(255), Random(255), 255), RGBA(255, 255, 255, 255))
Next
If Line.i < 14
AddVectorTextNewLine(#MyText3)
EndIf
Next
MyImageVectorTexte3.i = CreateImageVectorText(#MyText3)
;}
;{ Draw Text
If StartVectorDrawing(CanvasVectorOutput(#MyCanvasGadget))
AddPathBox(0, 0, GadgetWidth(#MyCanvasGadget), GadgetHeight(#MyCanvasGadget))
VectorSourceColor(RGBA(255, 150, 0, 255))
FillPath()
StopVectorDrawing()
EndIf
If IsImage(MyImageVectorTexte1.i)
If StartVectorDrawing(CanvasVectorOutput(#MyCanvasGadget))
AddPathBox(10.5, 10.5, ImageWidth(MyImageVectorTexte1.i) + 10, ImageHeight(MyImageVectorTexte1.i) + 10)
VectorSourceColor(RGBA(0, 0, 0, 255))
StrokePath(1)
MovePathCursor(15, 15)
DrawVectorImage(ImageID(MyImageVectorTexte1.i), 255)
StopVectorDrawing()
EndIf
Else
Debug "Miss !"
EndIf
If IsImage(MyImageVectorTexte2.i)
If StartVectorDrawing(CanvasVectorOutput(#MyCanvasGadget))
AddPathBox(10.5, 90.5, ImageWidth(MyImageVectorTexte2.i) + 10, ImageHeight(MyImageVectorTexte2.i) + 10)
VectorSourceColor(RGBA(0, 0, 0, 255))
StrokePath(1)
MovePathCursor(15, 95)
DrawVectorImage(ImageID(MyImageVectorTexte2.i), 255)
StopVectorDrawing()
EndIf
Else
Debug "Miss !"
EndIf
If IsImage(MyImageVectorTexte3.i)
If StartVectorDrawing(CanvasVectorOutput(#MyCanvasGadget))
AddPathBox(10.5, 278.5, ImageWidth(MyImageVectorTexte3.i) + 10, ImageHeight(MyImageVectorTexte3.i) + 10)
VectorSourceColor(RGBA(0, 0, 0, 255))
StrokePath(1)
MovePathCursor(15, 283)
DrawVectorImage(ImageID(MyImageVectorTexte3.i), 255)
StopVectorDrawing()
EndIf
Else
Debug "Miss !"
EndIf
;}
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf