- State (permet de mémoriser l'état actuel du bouton afin d'éviter de rafraichir l'image du bouton bêtement)
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V3.126.612
; Nom du projet : RollOverButtonGadget
; Nom du fichier : RollOverButtonGadget.pb
; Version du fichier : 1.0.0
; Programmation : OK
; Programmé par : Falsam
; Modifié par : Guimauve
; Date : 13-03-2011
; Mise à jour : 04-02-2012
; Codé pour PureBasic V4.61
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes
; Drawback, this gadget don't have a GadgetData
; anymore because the it's used to store
; information related to the Gadget.
; A little Hint, Image for button can be create
; freely on http://cooltext.com/
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Cet instruction est nécessaire pour éviter une fuite mémoire.
; Dans le cas d'une utilisation dans une fenètre de requète par
; exemple. Pour la fenêtre principale c'est facultatif ou encore
; pour les puristes.
; This instruction is necessary to avoid a memory leak. In the
; case of use in a query window for example. For the main window
; is optional, or for the purists.
; FreeRollOverButtonGadget(#Gadget)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Enumeration
#ROLL_OVER_STATE_HOVER
#ROLL_OVER_STATE_NORMAL
#ROLL_OVER_STATE_MAX
EndEnumeration
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure RollOverButton
StateImage.l[#ROLL_OVER_STATE_MAX]
State.b
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetRollOverButtonGadgetState(RollOverButtonA)
RollOverButtonA\State
EndMacro
Macro GetRollOverButtonStateImage(RollOverButtonA, Index)
RollOverButtonA\StateImage[Index]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetRollOverButtonGadgetState(RollOverButtonA, P_State)
GetRollOverButtonGadgetState(RollOverButtonA) = P_State
EndMacro
Macro SetRollOverButtonStateImage(RollOverButtonA, Index, P_StateImage)
GetRollOverButtonStateImage(RollOverButtonA, Index) = P_StateImage
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetRollOverButton(RollOverButtonA)
SetRollOverButtonGadgetState(RollOverButtonA, #ROLL_OVER_STATE_NORMAL)
For Index = 0 To #ROLL_OVER_STATE_MAX - 1
If IsImage(GetRollOverButtonStateImage(RollOverButtonA, Index))
FreeImage(GetRollOverButtonStateImage(RollOverButtonA, Index))
SetRollOverButtonStateImage(RollOverButtonA, Index, 0)
EndIf
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le Constructeur <<<<<
Procedure.i CreateNewRollOverButton()
*RollOverButtonA.RollOverButton = AllocateMemory(SizeOf(RollOverButton))
If *RollOverButtonA = #Null
MessageRequester("Fatal Error", "CreateNewRollOverButton() - Impossible to Allocate Memory !")
End
EndIf
ProcedureReturn *RollOverButtonA
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.002 secondes (45500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Macro HoverGadgetCheck(x, y, Gadget)
(x >= GadgetX(Gadget) And y >= GadgetY(Gadget) And x < GadgetX(Gadget) + GadgetWidth(Gadget) And y < GadgetY(Gadget) + GadgetHeight(Gadget))
EndMacro
Procedure RollOverButtonGadget(GadgetID.l, x.l, y.l, FileName00.s, FileName01.s = "")
*RollOverButtonA.RollOverButton = CreateNewRollOverButton()
If *RollOverButtonA <> #Null
If FileName01 = ""
ImageHandle = LoadImage(#PB_Any, FileName00)
Width = ImageWidth(ImageHandle) >> 1
Height = ImageHeight(ImageHandle)
SetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER, GrabImage(ImageHandle, #PB_Any, 0, 0, Width, Height))
SetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL, GrabImage(ImageHandle, #PB_Any, Width, 0, Width, Height))
FreeImage(ImageHandle)
Else
SetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER, LoadImage(#PB_Any, FileName01))
SetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL, LoadImage(#PB_Any, FileName00))
Width = ImageWidth(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER))
Height = ImageHeight(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER))
EndIf
GadgetHandle = ImageGadget(GadgetID, x, y, Width, Height, ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL)))
If GadgetID = #PB_Any
GadgetID = GadgetHandle
EndIf
SetRollOverButtonGadgetState(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL)
SetGadgetData(GadgetID, *RollOverButtonA)
EndIf
ProcedureReturn GadgetHandle
EndProcedure
Procedure RollOverButtonImageSwitch(GadgetID, WinID)
WinMouseX = WindowMouseX(WinID)
WinMouseY = WindowMouseY(WinID)
*RollOverButtonA.RollOverButton = GetGadgetData(GadgetID)
If *RollOverButtonA <> 0
If HoverGadgetCheck(WinMouseX, WinMouseY, GadgetID)
If GetRollOverButtonGadgetState(*RollOverButtonA) <> #ROLL_OVER_STATE_HOVER
SetGadgetState(GadgetID, ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER)))
SetRollOverButtonGadgetState(*RollOverButtonA, #ROLL_OVER_STATE_HOVER)
EndIf
Else
If GetRollOverButtonGadgetState(*RollOverButtonA) <> #ROLL_OVER_STATE_NORMAL
SetGadgetState(GadgetID, ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL)))
SetRollOverButtonGadgetState(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL)
EndIf
EndIf
EndIf
EndProcedure
Procedure FreeRollOverButtonGadget(GadgetID)
*RollOverButtonA.RollOverButton = GetGadgetData(GadgetID)
If *RollOverButtonA <> #Null
ResetRollOverButton(*RollOverButtonA)
FreeGadget(GadgetID)
FreeMemory(*RollOverButtonA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<< !!! WARNING - TESTING CODE !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Enumeration
#MainForm
#ButtonImage1 ; Bouton Image 1
#ButtonImage2 ; Bouton Image 2
#ButtonImage3 ; Bouton Image 2
EndEnumeration
UsePNGImageDecoder()
Macro GadgetDown(GadgetID, Gap = 0)
GadgetY(GadgetID) + GadgetHeight(GadgetID) + Gap
EndMacro
If OpenWindow(#MainForm, 0, 0, 500, 300, "RollOverButtonGadget V2", #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_SystemMenu)
RollOverButtonGadget(#ButtonImage1, 5, 5, "Screen Resolution - Normal.png", "Screen Resolution - MouseOver.png")
RollOverButtonGadget(#ButtonImage2, 5, GadgetDown(#ButtonImage1), "Launch Demo - Normal.png", "Launch Demo - MouseOver.png")
RollOverButtonGadget(#ButtonImage3, 5, GadgetDown(#ButtonImage2), "Quit - Normal.png", "Quit - MouseOver.png")
EndIf
Repeat
RollOverButtonImageSwitch(#ButtonImage1, #MainForm)
RollOverButtonImageSwitch(#ButtonImage2, #MainForm)
RollOverButtonImageSwitch(#ButtonImage3, #MainForm)
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #ButtonImage1
Debug "Screen Resolution"
Case #ButtonImage2
Debug "Launch Demo"
Case #ButtonImage3
Debug "Quit"
EventID = #PB_Event_CloseWindow
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Ces instructions sont nécessaire pour éviter une fuite mémoire.
; Dans le cas d'une utilisation dans une fenètre de requète par
; exemple. Pour la fenêtre principale c'est facultatif ou encore
; pour les puristes.
; These instructions are necessary to avoid a memory leak. In the
; case of use in a query window for example. For the main window
; is optional, or for the purists.
FreeRollOverButtonGadget(#ButtonImage1)
FreeRollOverButtonGadget(#ButtonImage2)
FreeRollOverButtonGadget(#ButtonImage3)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; IDE Options = PureBasic 4.61 Beta 1 (Linux - x64)
; CursorPosition = 253
; FirstLine = 232
; Folding = ---
; EnableXP
; CompileSourceDirectory