This is a reworked gadget created by falsam on the French forum.
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 fot 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
GadgetID.l
GadgetHandle.l
StateImage.l[#ROLL_OVER_STATE_MAX]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetRollOverButtonGadgetID(RollOverButtonA)
RollOverButtonA\GadgetID
EndMacro
Macro GetRollOverButtonGadgetHandle(RollOverButtonA)
RollOverButtonA\GadgetHandle
EndMacro
Macro GetRollOverButtonStateImage(RollOverButtonA, Index)
RollOverButtonA\StateImage[Index]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetRollOverButtonGadgetID(RollOverButtonA, P_GadgetID)
GetRollOverButtonGadgetID(RollOverButtonA) = P_GadgetID
EndMacro
Macro SetRollOverButtonGadgetHandle(RollOverButtonA, P_GadgetHandle)
GetRollOverButtonGadgetHandle(RollOverButtonA) = P_GadgetHandle
EndMacro
Macro SetRollOverButtonStateImage(RollOverButtonA, Index, P_StateImage)
GetRollOverButtonStateImage(RollOverButtonA, Index) = P_StateImage
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetRollOverButton(RollOverButtonA)
SetRollOverButtonGadgetID(RollOverButtonA, 0)
SetRollOverButtonGadgetHandle(RollOverButtonA, 0)
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)
(((Not x < GadgetX(Gadget)) & (Not y < GadgetY(Gadget))) & (Not x >= (GadgetX(Gadget) + GadgetWidth(Gadget))) & (Not 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,24))
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
SetRollOverButtonGadgetID(*RollOverButtonA, GadgetID)
SetRollOverButtonGadgetHandle(*RollOverButtonA, ImageGadget(GadgetID, x, y, Width, Height, ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL))))
If GadgetID <> #PB_Any
SetGadgetData(GadgetID, *RollOverButtonA)
Else
SetGadgetData(GetRollOverButtonGadgetHandle(*RollOverButtonA), *RollOverButtonA)
EndIf
EndIf
ProcedureReturn GetRollOverButtonGadgetHandle(*RollOverButtonA)
EndProcedure
Procedure RollOverButtonImageSwitch(GadgetID, WinID)
WinMouseX = WindowMouseX(WinID)
WinMouseY = WindowMouseY(WinID)
*RollOverButtonA.RollOverButton = GetGadgetData(GadgetID)
If GetRollOverButtonGadgetID(*RollOverButtonA) <> #PB_Any
If HoverGadgetCheck(WinMouseX, WinMouseY, GetRollOverButtonGadgetID(*RollOverButtonA))
SetGadgetState(GetRollOverButtonGadgetID(*RollOverButtonA), ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER)))
Else
SetGadgetState(GetRollOverButtonGadgetID(*RollOverButtonA), ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL)))
EndIf
Else
If HoverGadgetCheck(WinMouseX, WinMouseY, GetRollOverButtonGadgetHandle(*RollOverButtonA))
SetGadgetState(GetRollOverButtonGadgetHandle(*RollOverButtonA), ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_HOVER)))
Else
SetGadgetState(GetRollOverButtonGadgetHandle(*RollOverButtonA), ImageID(GetRollOverButtonStateImage(*RollOverButtonA, #ROLL_OVER_STATE_NORMAL)))
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,"Bouton Image Rollover", #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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
A little Hint, the Image for buttons can be created freely on http://cooltext.com/
Have fun !
Best regards.
Guimauve