Code: Alles auswählen
Declare InitHoverButtons ()
Declare CreateHoverButton (GadgetID.l,x.l,y.l,ImageID_Normal.l,ImageID_Hovered.l)
Declare HoverButtonEvent()
Declare FuseImage2Window (ImageID.l)
#ButtonHovered=1
#ButtonNormal=2
UseJPEGImageDecoder(); Wichtig. Sonst kann kein JPG verwendet werden
If OpenWindow(0, 0, 0, 300, 250, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "HoverButton") And CreateGadgetList(WindowID(0))
CatchImage (#ButtonNormal,?Button_Normal)
CatchImage (#ButtonHovered,?Button_Hovered)
FuseImage2Window (#ButtonNormal)
FuseImage2Window (#ButtonHovered)
If InitHoverButtons ()
CreateHoverButton (1,100,20,#ButtonNormal,#ButtonHovered)
CreateHoverButton (2,100,80,#ButtonNormal,#ButtonHovered)
CreateHoverButton (3,100,140,#ButtonNormal,#ButtonHovered)
EndIf
Repeat
WnEventID.l=WaitWindowEvent()
HBEventID.l=HoverButtonEvent()
Select WNEventID.l
Case #PB_Event_Gadget
Select HBEventID.l
Case 1
Beep_(1000,100)
Case 2
Beep_(2000,100)
Case 3
Beep_(3000,100)
EndSelect
EndSelect
Until WnEventID.l = #PB_Event_CloseWindow
EndIf
Procedure InitHoverButtons ()
Shared WsHB_Init.l
If WsHB_Init.l=0
Structure HoverButtonStruct
GadgetID.l
ImageID_Normal.l
ImageID_Hovered.l
EndStructure
Global NewList HovButID.HoverButtonStruct ()
WsHB_Init.l=1
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure CreateHoverButton (GadgetID.l,x.l,y.l,ImageID_Normal.l,ImageID_Hovered.l)
ImageGadget(GadgetID.l,x.l,y.l,ImageWidth(ImageID_Normal.l),ImageHeight(ImageID_Normal.l), ImageID_Normal.l) ; Empfängt Klickevents wie das ButtonGadget
AddElement (HovButID())
HovButID ()\GadgetID=GadgetID.l
HovButID ()\ImageID_Normal=ImageID(ImageID_Normal.l)
HovButID ()\ImageID_Hovered=ImageID(ImageID_Hovered.l)
EndProcedure
Procedure HoverButtonEvent()
ForEach HovButID ()
wnd.l=GadgetID(HovButID ()\GadgetID)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
Result = PtInRect_(re,pt\x,pt\y)
If Result
SetGadgetState (HovButID()\GadgetID,HovButID ()\ImageID_Hovered)
WichGadget.l=HovButID()\GadgetID
Else
SetGadgetState (HovButID()\GadgetID,HovButID ()\ImageID_Normal)
EndIf
Next
ProcedureReturn WichGadget.l
EndProcedure
Procedure FuseImage2Window (ImageID.l)
StartDrawing (ImageOutput (ImageID.l))
For x=0 To ImageWidth (ImageID.l)-1
For y=0 To ImageHeight (ImageID.l)-1
If Point (x,y)=RGB(255,0,255)
Plot (x,y,GetSysColor_(#COLOR_BTNFACE))
EndIf
Next y
Next x
StopDrawing ()
EndProcedure
DataSection
Button_Normal : IncludeBinary "Button_Normal.bmp"
Button_Hovered : IncludeBinary "Button_Hovered.bmp"
EndDataSection