Voici le code:
Code : Tout sélectionner
; VectorCustomButton créé par Mr Dieppedalle David le 31/07/2020.
; Version: 1.01.00
; Version: 1.02.00 le 31/07/2020.
; Correction diverse, ajout de code, maintenant il est possible de créer de petit bouton si l'arrondis du bouton est petit, de créer des boutons carré, de personnaliser le type de bordure parmis 3 choix.
Procedure VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$ = "", TextHeight.i = 16, TextColord.q = 18446744073692774400, TextFont.i = 0, BorderType.i = #PB_Path_Default, BorderColord.q = 18446744073702643350, BorderInsideType.i = #PB_Path_Default, InsideGradientColord1.q = 18446744073707906790, InsideGradientColord2.q = 18446744073705933000, BorderRound.i = 10, InsidePositionOffSet.i = 0, InsideRoundOffSet.i = 0)
If Width.i < 1
Width.i = 1
EndIf
If Height.i < 1
Height.i = 1
EndIf
If BorderRound.i < = 0
BorderRound.i = 1
EndIf
AddPathBox(X.i + (BorderRound.i / 2), Y.i + (BorderRound.i / 2), Width.i - BorderRound.i, Height.i - BorderRound.i)
VectorSourceColor(BorderColord.q)
FillPath()
AddPathBox(X.i + (BorderRound.i / 2), Y.i + (BorderRound.i / 2), Width.i - BorderRound.i, Height.i - BorderRound.i)
VectorSourceColor(BorderColord.q)
StrokePath(BorderRound.i, BorderType.i)
VectorSourceLinearGradient(0, Height.i, 0, 0)
VectorSourceGradientColor(InsideGradientColord1.q, 0.0)
VectorSourceGradientColor(InsideGradientColord2.q, 0.50)
VectorSourceGradientColor(InsideGradientColord1.q, 1)
AddPathBox(X.i + Width.i / 4, Y.i + Height.i / 4, Width.i - (Width.i / 2), Height.i - (Height.i / 2))
FillPath()
VectorSourceLinearGradient(0, Height.i, 0, 0)
VectorSourceGradientColor(InsideGradientColord1.q, 0.0)
VectorSourceGradientColor(InsideGradientColord2.q, 0.50)
VectorSourceGradientColor(InsideGradientColord1.q, 1)
AddPathBox(1 + X.i + (BorderRound.i / 2) + InsidePositionOffSet.i + (InsideRoundOffSet.i / 2), 1 + Y.i + (BorderRound.i / 2) + InsidePositionOffSet.i + (InsideRoundOffSet.i / 2), Width.i - BorderRound.i - 2 - (InsidePositionOffSet.i * 2) - InsideRoundOffSet.i, Height.i - BorderRound.i - 2 - (InsidePositionOffSet.i * 2) - InsideRoundOffSet.i)
If BorderRound.i + InsideRoundOffSet.i > 0
StrokePath(BorderRound.i + InsideRoundOffSet.i, BorderInsideType.i)
Else
StrokePath(1, BorderInsideType.i)
EndIf
AddPathBox(1 + X.i + (BorderRound.i / 2) + InsidePositionOffSet.i + (InsideRoundOffSet.i / 2), 1 + Y.i + (BorderRound.i / 2) + InsidePositionOffSet.i + (InsideRoundOffSet.i / 2), Width.i - BorderRound.i - 2 - (InsidePositionOffSet.i * 2) - InsideRoundOffSet.i, Height.i - BorderRound.i - 2 - (InsidePositionOffSet.i * 2) - InsideRoundOffSet.i)
VectorSourceLinearGradient(0, Height.i, 0, 0)
VectorSourceGradientColor(InsideGradientColord1.q, 0.0)
VectorSourceGradientColor(InsideGradientColord2.q, 0.50)
VectorSourceGradientColor(InsideGradientColord1.q, 1)
FillPath()
If TextHeight.i <= 0
TextHeight.i = 16
EndIf
If Not IsFont(TextFont.i)
TextFont.i = LoadFont(#PB_Any, "", TextHeight.i, #PB_Font_HighQuality)
EndIf
VectorFont(FontID(TextFont.i), TextHeight.i)
MovePathCursor(X.i + (Width.i - VectorTextWidth(Text$)) / 2, Y.i + (Height.i - VectorTextHeight(Text$)) / 2)
AddPathText(Text$)
VectorSourceColor(TextColord.q)
FillPath()
EndProcedure
; Exemple:
If OpenWindow(0, 0, 0, 800, 600, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, 800, 600)
LoadFont(0, "Times New Roman", 10, #PB_Font_Bold | #PB_Font_HighQuality)
If StartVectorDrawing(CanvasVectorOutput(0))
VectorSourceColor(RGBA(220, 220, 220, 255))
AddPathBox(0, 0, 800, 600)
FillPath()
StopVectorDrawing()
EndIf
; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
X.i = 25 ; Position X du Bouton.
Y.i = 25 ; Position Y du Bouton.
Width.i = 250 ; Largeur du Bouton.
Height.i = 175; Hauteur du Bouton.
BorderType.i = #PB_Path_Default ; Le type de bordure du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
BorderRound.i = 125 ; Taille des coins arrondis du Bouton (Attention, ne devraie pas être plus grand que Height.i - 25 pour un affichage correcte, sans effet si le type de la bordure est defaut.
InsidePositionOffSet.i = 0 ; Position d'ajustement du dégradé à l'intérieur du Bouton, par defaut se situe à +1 pixel après la bordure du Bouton, une valeur positive éloigne et diminue le dégradé intérieur du Bouton, une valeur négative raproche et agrandis le dégradé intérieur du bouton.
InsideRoundOffSet.i = 0 ; Ajuste la taille des coins arrondis du dégradé à l'interieur du Bouton, par defaut est égale à BorderRound.i, une valeur positive augmente la taille des coins arrondis du dégradé à l'interieur du Bouton, une valeur négative diminue la taille des coins arrondis du dégradé à l'interieur du Bouton, sans effet si le type de la bordure est defaut.
BorderColord.q = RGBA(150, 150, 150, 255) ; Couleur de la bordure du Bouton.
BorderInsideType.i = #PB_Path_Default ; Le type de bordure interieur du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
InsideGradientColord1.q = RGBA(254, 241, 201, 255) ; Couleur n°1 du dégradé du Bouton.
InsideGradientColord2.q = RGBA(254, 227, 143, 255) ; Couleur n°2 du dégradé du Bouton.
TextColord.q = RGBA(0, 125, 0, 255) ; Couleur du Texte du Bouton.
TextHeight.i = 24 ; Taille du Texte du Bouton.
Text$ = "Mon Bouton" ; Texte du Bouton.
If StartVectorDrawing(CanvasVectorOutput(0))
VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$, TextHeight.i, TextColord.q, TextFont.i, BorderType.i, BorderColord.q, BorderInsideType.i, InsideGradientColord1.q, InsideGradientColord2.q, BorderRound.i, InsidePositionOffSet.i, InsideRoundOffSet.i)
StopVectorDrawing()
EndIf
; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
X.i = 300 ; Position X du Bouton.
Y.i = 25 ; Position Y du Bouton.
Width.i = 250 ; Largeur du Bouton.
Height.i = 175; Hauteur du Bouton.
BorderType.i = #PB_Path_RoundCorner ; Le type de bordure du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
BorderRound.i = 175 ; Taille des coins arrondis du Bouton (Attention, ne devraie pas être plus grand que Height.i - 25 pour un affichage correcte, sans effet si le type de la bordure est defaut.
InsidePositionOffSet.i = 15 ; Position d'ajustement du dégradé à l'intérieur du Bouton, par defaut se situe à +1 pixel après la bordure du Bouton, une valeur positive éloigne et diminue le dégradé intérieur du Bouton, une valeur négative raproche et agrandis le dégradé intérieur du bouton.
InsideRoundOffSet.i = -75 ; Ajuste la taille des coins arrondis du dégradé à l'interieur du Bouton, par defaut est égale à BorderRound.i, une valeur positive augmente la taille des coins arrondis du dégradé à l'interieur du Bouton, une valeur négative diminue la taille des coins arrondis du dégradé à l'interieur du Bouton, sans effet si le type de la bordure est defaut.
BorderColord.q = RGBA(0, 0, 200, 255) ; Couleur de la bordure du Bouton.
BorderInsideType.i = #PB_Path_DiagonalCorner ; Le type de bordure interieur du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
InsideGradientColord1.q = RGBA(200, 200, 200, 255) ; Couleur n°1 du dégradé du Bouton.
InsideGradientColord2.q = RGBA(230, 230, 230, 255) ; Couleur n°2 du dégradé du Bouton.
TextColord.q = RGBA(255, 0, 0, 255) ; Couleur du Texte du Bouton.
TextHeight.i = 24 ; Taille du Texte du Bouton.
Text$ = "Mon Bouton" ; Texte du Bouton.
If StartVectorDrawing(CanvasVectorOutput(0))
VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$, TextHeight.i, TextColord.q, TextFont.i, BorderType.i, BorderColord.q, BorderInsideType.i, InsideGradientColord1.q, InsideGradientColord2.q, BorderRound.i, InsidePositionOffSet.i, InsideRoundOffSet.i)
StopVectorDrawing()
EndIf
; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
X.i = 25 ; Position X du Bouton.
Y.i = 225 ; Position Y du Bouton.
Width.i = 250 ; Largeur du Bouton.
Height.i = 175; Hauteur du Bouton.
BorderType.i = #PB_Path_Default ; Le type de bordure du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
BorderRound.i = 50 ; Taille des coins arrondis du Bouton (Attention, ne devraie pas être plus grand que Height.i - 25 pour un affichage correcte, sans effet si le type de la bordure est defaut.
InsidePositionOffSet.i = 0 ; Position d'ajustement du dégradé à l'intérieur du Bouton, par defaut se situe à +1 pixel après la bordure du Bouton, une valeur positive éloigne et diminue le dégradé intérieur du Bouton, une valeur négative raproche et agrandis le dégradé intérieur du bouton.
InsideRoundOffSet.i = 75 ; Ajuste la taille des coins arrondis du dégradé à l'interieur du Bouton, par defaut est égale à BorderRound.i, une valeur positive augmente la taille des coins arrondis du dégradé à l'interieur du Bouton, une valeur négative diminue la taille des coins arrondis du dégradé à l'interieur du Bouton, sans effet si le type de la bordure est defaut.
BorderColord.q = RGBA(225, 0, 0, 255) ; Couleur de la bordure du Bouton.
BorderInsideType.i = #PB_Path_DiagonalCorner ; Le type de bordure interieur du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
InsideGradientColord1.q = RGBA(200, 200, 200, 255) ; Couleur n°1 du dégradé du Bouton.
InsideGradientColord2.q = RGBA(230, 230, 230, 255) ; Couleur n°2 du dégradé du Bouton.
TextColord.q = RGBA(255, 175, 0, 255) ; Couleur du Texte du Bouton.
TextHeight.i = 24 ; Taille du Texte du Bouton.
Text$ = "Mon Bouton" ; Texte du Bouton.
If StartVectorDrawing(CanvasVectorOutput(0))
VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$, TextHeight.i, TextColord.q, TextFont.i, BorderType.i, BorderColord.q, BorderInsideType.i, InsideGradientColord1.q, InsideGradientColord2.q, BorderRound.i, InsidePositionOffSet.i, InsideRoundOffSet.i)
StopVectorDrawing()
EndIf
; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
X.i = 300 ; Position X du Bouton.
Y.i = 225 ; Position Y du Bouton.
Width.i = 250 ; Largeur du Bouton.
Height.i = 175; Hauteur du Bouton.
BorderType.i = #PB_Path_RoundCorner ; Le type de bordure du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
BorderRound.i = 150 ; Taille des coins arrondis du Bouton (Attention, ne devraie pas être plus grand que Height.i - 25 pour un affichage correcte, sans effet si le type de la bordure est defaut.
InsidePositionOffSet.i = 10 ; Position d'ajustement du dégradé à l'intérieur du Bouton, par defaut se situe à +1 pixel après la bordure du Bouton, une valeur positive éloigne et diminue le dégradé intérieur du Bouton, une valeur négative raproche et agrandis le dégradé intérieur du bouton.
InsideRoundOffSet.i = -22 ; Ajuste la taille des coins arrondis du dégradé à l'interieur du Bouton, par defaut est égale à BorderRound.i, une valeur positive augmente la taille des coins arrondis du dégradé à l'interieur du Bouton, une valeur négative diminue la taille des coins arrondis du dégradé à l'interieur du Bouton, sans effet si le type de la bordure est defaut.
BorderColord.q = RGBA(0, 150, 0, 255) ; Couleur de la bordure du Bouton.
BorderInsideType.i = #PB_Path_RoundCorner ; Le type de bordure interieur du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
InsideGradientColord1.q = RGBA(254, 241, 201, 255) ; Couleur n°1 du dégradé du Bouton.
InsideGradientColord2.q = RGBA(254, 227, 143, 255) ; Couleur n°2 du dégradé du Bouton.
TextColord.q = RGBA(0, 0, 200, 255) ; Couleur du Texte du Bouton.
TextHeight.i = 24 ; Taille du Texte du Bouton.
Text$ = "Mon Bouton" ; Texte du Bouton.
If StartVectorDrawing(CanvasVectorOutput(0))
VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$, TextHeight.i, TextColord.q, TextFont.i, BorderType.i, BorderColord.q, BorderInsideType.i, InsideGradientColord1.q, InsideGradientColord2.q, BorderRound.i, InsidePositionOffSet.i, InsideRoundOffSet.i)
StopVectorDrawing()
EndIf
; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
X.i = 25 ; Position X du Bouton.
Y.i = 435 ; Position Y du Bouton.
Width.i = 250 ; Largeur du Bouton.
Height.i = 125; Hauteur du Bouton.
BorderType.i = #PB_Path_RoundCorner ; Le type de bordure du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
BorderRound.i = 125 ; Taille des coins arrondis du Bouton (Attention, ne devraie pas être plus grand que Height.i - 25 pour un affichage correcte, sans effet si le type de la bordure est defaut.
InsidePositionOffSet.i = 10 ; Position d'ajustement du dégradé à l'intérieur du Bouton, par defaut se situe à +1 pixel après la bordure du Bouton, une valeur positive éloigne et diminue le dégradé intérieur du Bouton, une valeur négative raproche et agrandis le dégradé intérieur du bouton.
InsideRoundOffSet.i = 0 ; Ajuste la taille des coins arrondis du dégradé à l'interieur du Bouton, par defaut est égale à BorderRound.i, une valeur positive augmente la taille des coins arrondis du dégradé à l'interieur du Bouton, une valeur négative diminue la taille des coins arrondis du dégradé à l'interieur du Bouton, sans effet si le type de la bordure est defaut.
BorderColord.q = RGBA(150, 150, 150, 255) ; Couleur de la bordure du Bouton.
BorderInsideType.i = #PB_Path_RoundCorner ; Le type de bordure interieur du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
InsideGradientColord1.q = RGBA(254, 241, 201, 255) ; Couleur n°1 du dégradé du Bouton.
InsideGradientColord2.q = RGBA(254, 227, 143, 255) ; Couleur n°2 du dégradé du Bouton.
TextColord.q = RGBA(0, 125, 0, 255) ; Couleur du Texte du Bouton.
TextHeight.i = 24 ; Taille du Texte du Bouton.
Text$ = "Mon Bouton" ; Texte du Bouton.
If StartVectorDrawing(CanvasVectorOutput(0))
VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$, TextHeight.i, TextColord.q, TextFont.i, BorderType.i, BorderColord.q, BorderInsideType.i, InsideGradientColord1.q, InsideGradientColord2.q, BorderRound.i, InsidePositionOffSet.i, InsideRoundOffSet.i)
StopVectorDrawing()
EndIf
; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
X.i = 300 ; Position X du Bouton.
Y.i = 447 ; Position Y du Bouton.
Width.i = 250 ; Largeur du Bouton.
Height.i = 100; Hauteur du Bouton.
BorderType.i = #PB_Path_DiagonalCorner ; Le type de bordure du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
BorderRound.i = 116 ; Taille des coins arrondis du Bouton (Attention, ne devraie pas être plus grand que Height.i - 25 pour un affichage correcte, sans effet si le type de la bordure est defaut.
InsidePositionOffSet.i = -2 ; Position d'ajustement du dégradé à l'intérieur du Bouton, par defaut se situe à +1 pixel après la bordure du Bouton, une valeur positive éloigne et diminue le dégradé intérieur du Bouton, une valeur négative raproche et agrandis le dégradé intérieur du bouton.
InsideRoundOffSet.i = -30 ; Ajuste la taille des coins arrondis du dégradé à l'interieur du Bouton, par defaut est égale à BorderRound.i, une valeur positive augmente la taille des coins arrondis du dégradé à l'interieur du Bouton, une valeur négative diminue la taille des coins arrondis du dégradé à l'interieur du Bouton, sans effet si le type de la bordure est defaut.
BorderColord.q = RGBA(255, 175, 0, 255) ; Couleur de la bordure du Bouton.
BorderInsideType.i = #PB_Path_DiagonalCorner ; Le type de bordure interieur du bouton: #PB_Path_Default, #PB_Path_RoundCorner, #PB_Path_DiagonalCorner.
InsideGradientColord1.q = RGBA(200, 200, 200, 255) ; Couleur n°1 du dégradé du Bouton.
InsideGradientColord2.q = RGBA(230, 230, 230, 255) ; Couleur n°2 du dégradé du Bouton.
TextColord.q = RGBA(255, 0, 0, 255) ; Couleur du Texte du Bouton.
TextHeight.i = 24 ; Taille du Texte du Bouton.
Text$ = "Mon Bouton" ; Texte du Bouton.
If StartVectorDrawing(CanvasVectorOutput(0))
VectorCustomButton(X.i, Y.i, Width.i, Height.i, Text$, TextHeight.i, TextColord.q, TextFont.i, BorderType.i, BorderColord.q, BorderInsideType.i, InsideGradientColord1.q, InsideGradientColord2.q, BorderRound.i, InsidePositionOffSet.i, InsideRoundOffSet.i)
StopVectorDrawing()
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Ajout d'un PanelGadget et ajout d’exemples:
https://drive.google.com/file/d/1EbmYjS ... sp=sharing
Version: 2.00.00 le 04/08/2020, par Mr Dieppedalle David.
Refonte totale, corrections, ajouts de fonctionnalités
Ajout la possibilité de mettre les bordures avec des couleurs dégradé (2, 3 ou 4) avec un mode Horizontal et Vertical.
Ajout la possibilité de mettre le Texte avec des couleurs dégradé (2, 3 ou 4) avec un mode Horizontal et Vertical.
Version: 2.10.00 le 04/08/2020, par Mr Dieppedalle David.
Ajout de la possibilité de mettre une image sur le bouton, avec un OffSet X et Y, une transparence et un alignement parmis 9 possibilité:
#VCB_ImageAlignmentTopLeft
#VCB_ImageAlignmentTop
#VCB_ImageAlignmentTopRight
#VCB_ImageAlignmentLeft
#VCB_ImageAlignmentCenter
#VCB_ImageAlignmentRight
#VCB_ImageAlignmentBottomLeft
#VCB_ImageAlignmentBottom
#VCB_ImageAlignmentBottomRight
Ajout de la possibilité de mettre le texte du Bouton avec un OffSet X et Y et un alignement parmi 9 possibilité:
#VCB_TextAlignmentTopLeft
#VCB_TextAlignmentTop
#VCB_TextAlignmentTopRight
#VCB_TextAlignmentLeft
#VCB_TextAlignmentCenter
#VCB_TextAlignmentRight
#VCB_TextAlignmentBottomLeft
#VCB_TextAlignmentBottom
#VCB_TextAlignmentBottomRight
Version: 2.15.00 le 08/08/2020, par Mr Dieppedalle David.
Ajout de la possibilité de mettre une Ombre sous le Texte du Bouton avec un OffSet en X et Y, une épaisseur ainsi qu'une couleur.
Ajout de la possibilité de mettre une Ombre sous le Bouton avec un OffSet en X, Y, Largeur et Hauteur, ainsi qu'une couleur.
https://drive.google.com/file/d/1nXLk49 ... sp=sharing