VectorCustomButton

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

VectorCustomButton

Message par Shadow »

Salut, je me suis cassé les dents sur ce petit programme pour créer des Boutons (Pas d’Événements, c'est juste des Images !) avec la librairie VectorDrawing :)
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
Version: 1.02.10 le 02/08/2020.
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
Dernière modification par Shadow le sam. 08/août/2020 17:22, modifié 6 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
grendizer
Messages : 59
Inscription : mer. 29/mai/2019 6:29

Re: VectorCurstomButton

Message par grendizer »

c'est du trés bon boulot Bravo shadows :)
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCurstomButton

Message par Shadow »

grendizer a écrit :c'est du trés bon boulot Bravo shadows :)
Merci bien.....
Cependant certaines choses me déplaisent :(

Plus l'arrondis du bouton est grand, plus grand doit être celui-ci.
Je dois améliorer, c'est bien mais c'est pas encore à la hauteur de mes espérances !

Je me suis cassé les dent sur tous ces foutus calcules :|
De plus, pas possible de faire des boutons carré.

Je vais et je dois amélioré tous cela ! :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCustomButton

Message par Shadow »

Mise à jour 1.02.00.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Mindphazer
Messages : 639
Inscription : mer. 24/août/2005 10:42

Re: VectorCurstomButton

Message par Mindphazer »

Shadow a écrit : Je me suis cassé les dent sur tous ces foutus calcules
A force de te péter les dents il doit plus t'en rester beaucoup :mrgreen:
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCurstomButton

Message par Shadow »

Mindphazer a écrit :
Shadow a écrit : Je me suis cassé les dent sur tous ces foutus calcules
A force de te péter les dents il doit plus t'en rester beaucoup :mrgreen:
Bha si, elles repoussent :mrgreen:
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCustomButton

Message par Shadow »

Refonte Totale en court...
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: VectorCustomButton

Message par Patrick88 »

ton code me laisse perplexe !
tu te casses le bonnet à faire une procédure avec pleins d'initialisations et de vérif
puis dans le code d'exemple au lieu de passer les paramétrés à la procédure directos tu passes par des variables intermédiaires ?
et c'est ces variables intermédiaires qui sont passées à la procédure ???
les noms de variables sont identiques dans la procedure et dans le code global !!!
bonjour le code doublons, les sources d'erreurs....
déclare tes variables au moins en "protected" ou local (je me souviens plus du terme) dans tes procédures. et global pour le reste...

ou t'es un habitué des goto gosub, et t'as pas bien compris à quoi servent les procédures ...

Pat
Shadow a écrit :

Code : Tout sélectionner

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)
...
 
; Exemple:
If OpenWindow(0

  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 ;
....
  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)
....

rebelotte et dix de fer  
  X.i = 300 ; Position X du Bouton.
  Y.i = 25 ; Position Y du Bouton.
  Width.i = 250 ; Largeur 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
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCustomButton

Message par Shadow »

Salut,

C'est fait exprès, c'est pour montrer l'utilité des paramètres.
La version 2 arrive bientôt avec encore plus de possibilités, refonte totale.
En court de finition...
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCustomButton

Message par Shadow »

Salutation,

Après un très dur labeur, je suis en mesure enfin de sortir une version totalement refaite.
J'ai ajouté moult choses, je vous laisse découvrir tous ça par vous même.

https://drive.google.com/file/d/1nXLk49 ... sp=sharing
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
grendizer
Messages : 59
Inscription : mer. 29/mai/2019 6:29

Re: VectorCustomButton

Message par grendizer »

pas mal du tout

et maintenant crée nous une interface complète
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: VectorCustomButton

Message par SPH »

grendizer a écrit :pas mal du tout

et maintenant crée nous une interface complète
Ouai ! 8)

J'ai même le titre : Boutons factory :wink:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VectorCustomButton

Message par Shadow »

grendizer a écrit :pas mal du tout

et maintenant crée nous une interface complète
Merci.
Oui, j'y pense mais ça demande du boulot !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: VectorCustomButton

Message par Micoute »

Mon exemple est peut-être moche, comma l'a dit falsam, mais il est fonctionnel, là ce ne sont que des images.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: VectorCustomButton

Message par Kwai chang caine »

Bon boulot, merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre