Comment faire pour que les boutons ne clignotent pas
Publié : mar. 25/avr./2017 12:05
Bonjour à tous,
je souhaiterais compléter mon programme, mais je voudrais changer le système de rafraichissement des gadgets, car ça clignote beaucoup parce mon timer est réglé sur constante de 50 millisecondes, alors je viens solliciter votre bienveillante pour régler ce problème et je vous en remercie énormément.
je souhaiterais compléter mon programme, mais je voudrais changer le système de rafraichissement des gadgets, car ça clignote beaucoup parce mon timer est réglé sur constante de 50 millisecondes, alors je viens solliciter votre bienveillante pour régler ce problème et je vous en remercie énormément.
Code : Tout sélectionner
;TODO ajouter les formes trapèze et triangle
;TODO prévoir des reliefs 3D : Plat, Tridimentionnel net, Tridimentionnel, Bordé, Métal tridimentionnel, Gel, Verre
;TODO prévoir la sauvegarde des paramètres
Enumeration Polices
#Police
EndEnumeration
Structure ListeBouton
Titre.s ; Titre du gadget
Actif.b ; #True ou #False
IDGadget.i ; ID image-gadget
BoutonImageID_dessine.i ; id de l'image pour dessiner dessus
BoutonImageID_normal.i ; id du fond normal de l'image
BoutonImageID_survol.i ; id du fond survolé de l'image
x.i ; position X du gadget
y.i ; position Y du gadget
Largeur.i ; Largeur du gadget
Hauteur.i ; Hauteur du gadget
Forme.i ; forme du bouton 1 = rectangle, 2 = arrondie, 3 = ronde, 4 Géllule
RotationDegrade.i ; dégradé du bouton 0 = circulaire, 1 = diagonale tombante, 2 = diagonale montante, 3 = horizontale, 4 = verticale
IconeImageID.i ; ID de l'icône
IconeLargeur.i ; Largeur de l'icône
IconeHauteur.i ; Hauteur de l'icône
Rayon.i ; Rayon de courbure de l'arrondi
RayonX.i ; Rayon x de l'ellipse
RayonY.i ; Rayon y de l'ellipse
IconeX.i ; Position X de l'icône dans le Gadget
IconeY.i ; Position Y de l'icône dans le Gadget
TitreX.i ; Position X du Titre dans le Gadget
TitreY.i ; Position Y du Titre dans le Gadget
NomPolice.s ; Nom de la police
TaillePolice.i ; Taille de la police
StylePolice.i ; Style de la police
DiminutionOmbre.i ; Diminution de l'ombre
IDFenetre.i ; ID de la fenêtre où ce bouton est dessiné
CouleurNormal1.i
CouleurNormal2.i
CouleurSurvol1.i
CouleurSurvol2.i
CouleurClic1.i
CouleurClic2.i
Contour.i
CouleurTitre.i
CouleurSousTitre.i
EndStructure
Structure ML_Bouton
Forme.i ; forme du bouton 1 = rectangle, 2 = arrondie, 3 = ronde, 4 Gélule
RotationDegrade.i ; dégradé du bouton 1 = linéaire, 2 = circulaire, 3 gélule, 4 boîte, 5 conique
BoutonImageID_normal.i
BoutonImageID_survol.i
NomPolice.s
TaillePolice.i
StylePolice.i
CouleurPolice.i
DiminutionOmbre.i
EpaisseurLigne.i
List ListeBouton.ListeBouton()
EndStructure
Global MonBouton.ML_Bouton
Global.b SourisSurGadget, SourisCliquee
Procedure SourisSurBouton(IdFenetre, IdBouton)
Global Sx = WindowMouseX(IdFenetre)
Global Sy = WindowMouseY(IdFenetre)
Global Bx = MonBouton\ListeBouton()\X
Global By = MonBouton\ListeBouton()\Y
Global Bl = MonBouton\ListeBouton()\Largeur
Global Bh = MonBouton\ListeBouton()\Hauteur
Global Id = MonBouton\ListeBouton()\IDGadget
If Sx > Bx And Sx < (Bx + Bl) And Sy > By And Sy < (By + Bh)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure AjouterContour(x.d, y.d, Largeur.d, Hauteur.d, RayonCoin, Drapeau = #PB_Path_Default)
Select MonBouton\ListeBouton()\Forme
Case 1 ;Rectangle ou Carré
MovePathCursor(x + RayonCoin, y, Drapeau & #PB_Path_Relative)
;coin haut gauche
AddPathEllipse(0, RayonCoin, RayonCoin, RayonCoin, 180, -90, #PB_Path_Relative)
;Ligne supérieure
AddPathLine(Largeur-RayonCoin*2, 0, #PB_Path_Relative)
;Coin haut droite
AddPathEllipse(0, RayonCoin, RayonCoin, RayonCoin, -90, 0, #PB_Path_Connected | #PB_Path_Relative)
;Ligne verticale droite
AddPathLine(0, Hauteur-RayonCoin*2, #PB_Path_Relative)
;Coin Bas droite
AddPathEllipse(-RayonCoin, 0, RayonCoin, RayonCoin, 0, 90, #PB_Path_Connected | #PB_Path_Relative)
;Ligne inférieure
AddPathLine(RayonCoin + RayonCoin-Largeur, 0, #PB_Path_Relative)
;Coin bas gauche
AddPathEllipse(0, -RayonCoin, RayonCoin, RayonCoin, 90, 180, #PB_Path_Connected | #PB_Path_Relative)
ClosePath()
Case 3 ;Rond
MovePathCursor(x + RayonCoin, y, Drapeau & #PB_Path_Relative)
AddPathCircle(x+Largeur/2, y+Largeur/2, largeur)
ClosePath()
Case 4 ;Ellipse
MovePathCursor(x + RayonCoin, y, Drapeau & #PB_Path_Relative)
AddPathEllipse(x+largeur/2, y+hauteur/2, Largeur/2, Hauteur/2)
ClosePath()
Case 2, 5 ;Boutons avec coins arrondis, dont pillule
MovePathCursor(x + RayonCoin, y, Drapeau & #PB_Path_Relative)
;coin haut gauche
AddPathEllipse(0, RayonCoin, RayonCoin, RayonCoin, 180, -90, #PB_Path_Relative)
;Ligne supérieure
AddPathLine((Largeur-RayonCoin*2)-Epaisseur/2, 0, #PB_Path_Relative)
;Coin haut droite
AddPathEllipse(0, RayonCoin, RayonCoin, RayonCoin, -90, 0, #PB_Path_Connected | #PB_Path_Relative)
;Ligne verticale droite
AddPathLine(0, (Hauteur-RayonCoin*2)-Epaisseur/2, #PB_Path_Relative)
;Coin Bas droite
AddPathEllipse(-RayonCoin, 0, RayonCoin, RayonCoin, 0, 90, #PB_Path_Connected | #PB_Path_Relative)
;Ligne inférieure
AddPathLine((RayonCoin + RayonCoin-Largeur) + Epaisseur/2, 0, #PB_Path_Relative)
;Coin bas gauche
AddPathEllipse(0, -RayonCoin, RayonCoin, RayonCoin, 90, 180, #PB_Path_Connected | #PB_Path_Relative)
ClosePath()
EndSelect
EndProcedure
Procedure CreerBouton(Fenetre, Id, x, y, Titre.s = "", Largeur = 0, Hauteur = 0, TaillePolice = 10,
CouleurNormal1 = $FFFF9600, CouleurNormal2 = $FF000000,
CouleurSurvol1 = $FFFFE600, CouleurSurvol2 = $FF000000,
CouleurClic1 = $AAAAAA00, CouleurClic2 = $FF000000,
Contour = $FF000000,
CouleurTitre = $FFFFFFFF, CouleurSousTitre = $FF000000)
;Remplir la liste
AddElement(MonBouton\ListeBouton())
With MonBouton\ListeBouton()
\IDGadget = Id
\X = x
\Y = y
\Largeur = Largeur
\Hauteur = Hauteur
\Titre = Titre.s
\TaillePolice = TaillePolice
\IDFenetre = IdFenetre
\CouleurNormal1 = CouleurNormal1
\CouleurNormal2 = CouleurClic2
\CouleurSurvol1 = CouleurSurvol1
\CouleurSurvol2 = CouleurSurvol2
\CouleurClic1 = CouleurClic1
\CouleurClic2 = CouleurClic2
\Contour = Contour
\CouleurTitre = CouleurTitre
\CouleurSousTitre = CouleurSousTitre
\Forme = 1
EndWith
EndProcedure
Procedure CreerBoutonArrondi(Fenetre, Id, x, y, Titre.s = "", Largeur = 0, Hauteur = 0,Rayon = 0, TaillePolice = 10,
CouleurNormal1 = $FFFF9600, CouleurNormal2 = $FF000000,
CouleurSurvol1 = $FFFFE600, CouleurSurvol2 = $FF000000,
CouleurClic1 = $AAAAAA00, CouleurClic2 = $FF000000,
Contour = $FF000000,
CouleurTitre = $FFFFFFFF, CouleurSousTitre = $FF000000)
;Remplir la liste
AddElement(MonBouton\ListeBouton())
With MonBouton\ListeBouton()
\IDGadget = Id
\X = x
\Y = y
\Largeur = Largeur
\Hauteur = Hauteur
\Titre = Titre.s
\Rayon = Rayon
\TaillePolice = TaillePolice
\IDFenetre = IdFenetre
\CouleurNormal1 = CouleurNormal1
\CouleurNormal2 = CouleurClic2
\CouleurSurvol1 = CouleurSurvol1
\CouleurSurvol2 = CouleurSurvol2
\CouleurClic1 = CouleurClic1
\CouleurClic2 = CouleurClic2
\Contour = Contour
\CouleurTitre = CouleurTitre
\CouleurSousTitre = CouleurSousTitre
\Forme = 2
EndWith
EndProcedure
Procedure CreerBoutonRond(Fenetre, Id, x, y, Titre.s = "", Rayon = 0, TaillePolice = 10,
CouleurNormal1 = $FFFF9600, CouleurNormal2 = $FF000000,
CouleurSurvol1 = $FFFFE600, CouleurSurvol2 = $FF000000,
CouleurClic1 = $AAAAAA00, CouleurClic2 = $FF000000,
Contour = $FF000000,
CouleurTitre = $FFFFFFFF, CouleurSousTitre = $FF000000)
;Remplir la liste
AddElement(MonBouton\ListeBouton())
With MonBouton\ListeBouton()
\IDGadget = Id
\X = x
\Y = y
\Largeur = Rayon/4
\Hauteur = Rayon/4
\Titre = Titre.s
\Rayon = Largeur/4
\TaillePolice = TaillePolice
\IDFenetre = IdFenetre
\CouleurNormal1 = CouleurNormal1
\CouleurNormal2 = CouleurClic2
\CouleurSurvol1 = CouleurSurvol1
\CouleurSurvol2 = CouleurSurvol2
\CouleurClic1 = CouleurClic1
\CouleurClic2 = CouleurClic2
\Contour = Contour
\CouleurTitre = CouleurTitre
\CouleurSousTitre = CouleurSousTitre
\Forme = 3
EndWith
EndProcedure
Procedure CreerBoutonEllipse(Fenetre, Id, x, y, Titre.s = "", RayonX = 0, RayonY = 0,TaillePolice = 10,
CouleurNormal1 = $FFFF9600, CouleurNormal2 = $FF000000,
CouleurSurvol1 = $FFFFE600, CouleurSurvol2 = $FF000000,
CouleurClic1 = $AAAAAA00, CouleurClic2 = $FF000000,
Contour = $FF000000,
CouleurTitre = $FFFFFFFF, CouleurSousTitre = $FF000000)
;Remplir la liste
AddElement(MonBouton\ListeBouton())
With MonBouton\ListeBouton()
\IDGadget = Id
\X = x
\Y = y
\Titre = Titre.s
\Largeur = RayonX
\Hauteur = RayonY
\RayonX = RayonX
\RayonY = RayonY
\TaillePolice = TaillePolice
\IDFenetre = IdFenetre
\CouleurNormal1 = CouleurNormal1
\CouleurNormal2 = CouleurClic2
\CouleurSurvol1 = CouleurSurvol1
\CouleurSurvol2 = CouleurSurvol2
\CouleurClic1 = CouleurClic1
\CouleurClic2 = CouleurClic2
\Contour = Contour
\CouleurTitre = CouleurTitre
\CouleurSousTitre = CouleurSousTitre
\Forme = 4
EndWith
EndProcedure
Procedure CreerBoutonPillule(Fenetre, Id, x, y, Titre.s = "", Largeur = 0, Hauteur = 0, TaillePolice = 10,
CouleurNormal1 = $FFFF9600, CouleurNormal2 = $FF000000,
CouleurSurvol1 = $FFFFE600, CouleurSurvol2 = $FF000000,
CouleurClic1 = $AAAAAA00, CouleurClic2 = $FF000000,
Contour = $FF000000,
CouleurTitre = $FFFFFFFF, CouleurSousTitre = $FF000000)
;Remplir la liste
AddElement(MonBouton\ListeBouton())
With MonBouton\ListeBouton()
\IDGadget = Id
\X = x
\Y = y
\Largeur = Largeur
\Hauteur = Hauteur
\Titre = Titre.s
\Rayon = hauteur/2
\TaillePolice = TaillePolice
\IDFenetre = IdFenetre
\CouleurNormal1 = CouleurNormal1
\CouleurNormal2 = CouleurClic2
\CouleurSurvol1 = CouleurSurvol1
\CouleurSurvol2 = CouleurSurvol2
\CouleurClic1 = CouleurClic1
\CouleurClic2 = CouleurClic2
\Contour = Contour
\CouleurTitre = CouleurTitre
\CouleurSousTitre = CouleurSousTitre
\Forme = 5
EndWith
EndProcedure
Procedure DessinerBouton()
Protected Rayon
With MonBouton\ListeBouton()
If \Largeur >= \Hauteur
Rayon = \Largeur
Else
Rayon = \Hauteur
EndIf
EndWith
If StartVectorDrawing(WindowVectorOutput(IdFenetre))
ForEach MonBouton\ListeBouton()
With MonBouton\ListeBouton()
AjouterContour(\X, \Y, \Largeur, \Hauteur, \Rayon)
VectorSourceCircularGradient(\X + \Largeur / 2, \Y + \Hauteur / 2, Rayon)
If SourisCliquee = #False
;Etat : Bouton survolé
If SourisSurBouton(\IdFenetre, \IDGadget) = #True
VectorSourceGradientColor(\CouleurSurvol1, 0)
VectorSourceGradientColor(\CouleurSurvol2, 1)
EndIf
;Etat : Bouton normal
If SourisSurBouton(\IdFenetre, \IDGadget) = #False
VectorSourceGradientColor(\CouleurNormal1, 0)
VectorSourceGradientColor(\CouleurNormal2, 1)
EndIf
Else
;Etat : Bouton cliqué
If SourisSurBouton(\IdFenetre, \IDGadget) = #True
VectorSourceGradientColor(\CouleurClic1, 0)
VectorSourceGradientColor(\CouleurClic2, 1)
EndIf
EndIf
FillPath(#PB_Path_Preserve)
;
;Dessin du contour
VectorSourceColor(\Contour)
;If \Forme = 1
; StrokePath(1, #PB_Path_SquareEnd)
;ElseIf \Forme = 2
StrokePath(1, #PB_Path_RoundEnd)
;EndIf
;Dessin du soustitre
VectorFont(FontID(#Police), \TaillePolice)
MovePathCursor(\X + (\Largeur - VectorTextWidth(\Titre))/2 + 4,
\Y + (\Hauteur - VectorTextHeight(\Titre))/2 + 4)
VectorSourceColor(\CouleurSousTitre)
AddPathText(\Titre)
FillPath()
;Dessin du titre
MovePathCursor(\X + (\Largeur - VectorTextWidth(\Titre))/2,
\Y + (\Hauteur - VectorTextHeight(\Titre))/2)
VectorSourceColor(\CouleurTitre)
AddPathText(\Titre)
FillPath(#PB_Path_Preserve)
VectorSourceColor(RGB(245, 245, 245))
StrokePath(1)
EndWith
Next
EndIf
;Fin du dessin
StopVectorDrawing()
EndProcedure
Procedure DefinirCouleurTitreBouton(Id, Couleur)
SelectElement(MonBouton\ListeBouton(), id)
MonBouton\ListeBouton()\CouleurTitre = RGBA(Red(Couleur),Green(Couleur), Blue(Couleur), 255)
EndProcedure
Procedure DefinirCouleurSousTitreBouton(Id, Couleur)
SelectElement(MonBouton\ListeBouton(), id)
MonBouton\ListeBouton()\CouleurSousTitre = RGBA(Red(Couleur),Green(Couleur), Blue(Couleur), 255)
EndProcedure
Procedure DefinirTaillePoliceBouton(Id)
Protected Police.i = FontRequester("Arial", 12, #PB_FontRequester_Effects)
SelectElement(MonBouton\ListeBouton(), id)
MonBouton\ListeBouton()\TaillePolice = SelectedFontSize()
EndProcedure
Procedure Clic()
ForEach MonBouton\ListeBouton()
If SourisSurBouton(Fenetres, MonBouton\ListeBouton()\IDGadget) = #True
SourisCliquee = #True
If MessageRequester("Information", "Vous avez cliqué sur le bouton " + MonBouton\ListeBouton()\IDGadget)
SourisCliquee = #False
EndIf
EndIf
Next
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration 0 Step 20
#Btn
EndEnumeration
Enumeration Gadgets
#Minuteur
EndEnumeration
If OpenWindow(#Fenetre_principale, 0, 0, 750, 320, "Bouton perso", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
LoadFont(#Police, "Verdana", 30, #PB_Font_Bold)
CreerBouton(#Fenetre_principale, #Btn+0, 10, 10, "Bouton 0", 240, 40, 20, $FF038CFF)
CreerBoutonArrondi(#Fenetre_principale, #Btn+1, 10, 60, "Bouton 1", 240, 40, 4, 20, $FF037AFF)
CreerBoutonArrondi(#Fenetre_principale, #Btn+2, 10, 110, "Bouton 2", 240, 40, 8, 20, $FF0350FF)
CreerBoutonArrondi(#Fenetre_principale, #Btn+3, 10, 160, "Bouton 3", 240, 40, 12, 20, $FF033AFF)
CreerBoutonArrondi(#Fenetre_principale, #Btn+4, 10, 210, "Bouton 4", 240, 40, 16, 20, $FF0326FF)
CreerBoutonArrondi(#Fenetre_principale, #Btn+5, 10, 260, "Bouton 5", 240, 40, 20, 20, $FF0300FF)
CreerBoutonRond(#Fenetre_principale, #Btn+6, 320, 100, "Bouton 6", 400, 20, $FF00B7FF)
CreerBoutonEllipse(#Fenetre_principale, #Btn+7, 500, 10, "Bouton 7", 200, 50, 20, $FFD653C9)
CreerBoutonEllipse(#Fenetre_principale, #Btn+8, 500, 70, "Bouton 8", 200, 50, 20, $FFBD53C9)
CreerBoutonEllipse(#Fenetre_principale, #Btn+7, 500, 130, "Bouton 9", 200, 50, 20, $FFA253C9)
CreerBoutonPillule(#Fenetre_principale, #Btn+8, 500, 190, "Bouton 10", 200, 50, 20, $FF8353C9)
;DefinirTaillePoliceBouton(#Btn+2)
;DefinirCouleurTitreBouton(#Btn+1, $FFFF)
;DefinirCouleurTitreBouton(#Btn+2, $FF00)
;DefinirCouleurTitreBouton(#Btn+3, $00)
;DefinirCouleurSousTitreBouton(#Btn+3, $FFFFFF)
AddWindowTimer(#Fenetre_principale, #Minuteur, 50)
BindEvent(#PB_Event_LeftClick, @Clic())
BindEvent(#PB_Event_Timer, @DessinerBouton())
Repeat
Evenement = WaitWindowEvent()
;DessinerBouton()
Until Evenement = #PB_Event_CloseWindow
EndIf
CompilerEndIf