

Code : Tout sélectionner
; A base de Bouton Plat sans bordures de Micoute, modifier par Dieppedalle David pour bouton style office le 10/05/2015
EnableExplicit
Prototype prototypeplat(Pointeur, Evenement = 0)
Structure donnees_bordures_bouton_plat
Gadget.i
Dessin.prototypeplat
Texte.s
CouleurTexte.i
CouleurInterieur.i
CouleurBordures.i
CouleurFond.i
Police.i
DonneesSupplementaires.i
EndStructure
;
Procedure DessinerBorduresBoutonPlat(*p.donnees_bordures_bouton_plat, Evenement = 0)
Protected x, y, th
If *p
If IsGadget(*p\Gadget)
If StartDrawing(CanvasOutput(*p\Gadget))
Select Evenement
Case 0
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, OutputWidth(), OutputHeight(), *p\CouleurFond)
Case 1
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(1, OutputHeight(), 1, 1)
GradientColor(1, RGB(255, 230, 150))
LinearGradient(1, 0, 1, OutputHeight())
GradientColor(0, RGB(255, 255, 255))
Box(1, 1, OutputWidth() + 1, (OutputHeight() / 2), 0)
LinearGradient(1, OutputHeight() / 2, 1, OutputHeight())
GradientColor(1, RGB(255, 255, 255))
LinearGradient(1, OutputHeight() / 2, 1, OutputHeight())
GradientColor(0, RGB(255, 214, 57))
Box(1, (OutputHeight() / 2) + 1, OutputWidth() - 2, OutputHeight(), 0)
DrawingMode(#PB_2DDrawing_Outlined)
Box(1, 1, OutputWidth() - 2, OutputHeight() - 2, RGB(255, 255, 255))
DrawingMode(#PB_2DDrawing_Default)
Line(1, 0, OutputWidth() - 2, 1, RGB(219, 206, 153))
Line(OutputWidth() - 1, 1, 1, OutputHeight() - 2, RGB(219, 206, 153))
Line(0, 1, 1, OutputHeight() - 2, RGB(219, 206, 153))
Line(1, OutputHeight()-1, OutputWidth() - 2, 1, RGB(219, 206, 153))
EndSelect
If IsFont(*p\Police)
DrawingFont(FontID(*p\Police))
EndIf
x = (OutputWidth() / 2) - (TextWidth(*p\Texte) / 2)
y = (OutputHeight() / 2) - (TextHeight(*p\Texte) / 2)
DrawingMode(#PB_2DDrawing_Default|#PB_2DDrawing_Transparent)
DrawText(x, y, *p\Texte, *p\CouleurTexte)
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
;
Procedure BorduresBoutonPlat(Gadget, x, y, Largeur, Hauteur, Texte.s, CouleurTexte, CouleurFond, CouleurInterieur, CouleurBordures, Police)
Protected *p.donnees_bordures_bouton_plat = AllocateMemory(SizeOf(donnees_bordures_bouton_plat))
Protected ID
If Not *p : ProcedureReturn #False : EndIf
InitializeStructure(*p, donnees_bordures_bouton_plat)
ID = CanvasGadget(Gadget, x, y, Largeur, Hauteur)
If Gadget = #PB_Any : Gadget = ID : EndIf
SetGadgetData(Gadget, *p)
*p\Gadget = Gadget
*p\Texte = Texte
*p\CouleurBordures = CouleurBordures
*p\CouleurFond = CouleurFond
*p\CouleurInterieur = CouleurInterieur
*p\Police = Police
*p\Dessin = @DessinerBorduresBoutonPlat()
*p\Dessin(*p, 0)
ProcedureReturn ID
EndProcedure
;
Procedure EvenementsBorduresBoutonPlat(Gadget, Evenement, TypeEvenement)
Protected *p.donnees_bordures_bouton_plat
If IsGadget(Gadget)
*p = GetGadgetData(Gadget)
If *p
If Evenement = #PB_Event_Gadget
Select TypeEvenement
Case #PB_EventType_MouseEnter, #PB_EventType_MouseMove, #PB_EventType_LeftButtonDown, #PB_EventType_RightButtonDown
*p\Dessin(*p, 1)
Default
*p\Dessin(*p, 0)
EndSelect
EndIf
EndIf
EndIf
EndProcedure
;
DisableExplicit
OpenWindow(0,200,300,150,127,"Fenêtre de test")
Police = LoadFont(#PB_Any, "Segoe UI", 9)
BorduresBoutonPlat(1, 1, 1, 148, 25, "Imprimante", 0, $F0F0F0, $FFE0C2, $FF9933, Police)
BorduresBoutonPlat(2, 1, 26, 148, 25, "Ordinateur", 0, $F0F0F0, $FFE0C2, $FF9933, Police)
BorduresBoutonPlat(3, 1, 51, 148, 25, "Souris", 0, $F0F0F0, $FFE0C2, $FF9933, Police)
BorduresBoutonPlat(4, 1, 76, 148, 25, "Clavier", 0, $F0F0F0, $FFE0C2, $FF9933, Police)
BorduresBoutonPlat(5, 1, 101, 148, 25, "Disque dur", 0, $F0F0F0, $FFE0C2, $FF9933, Police)
AddKeyboardShortcut(0,#PB_Shortcut_Escape, 9999)
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
EvenementsBorduresBoutonPlat(EventGadget(), Evenement, EventType())
Select EventType()
Case #PB_EventType_LeftClick
Select EventGadget()
Case 1
Debug "Clic sur Imprimante"
Case 2
Debug "Clic sur Ordinateur"
Case 3
Debug "Clic sur Souris"
Case 4
Debug "Clic sur Clavier"
Case 5
Debug "Clic sur Disque dur"
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Quitter = 1
EndSelect
Until Quitter > 0