Code: Select all
Procedure onMouseOver(GadgetNumber)
X = GadgetX(GadgetNumber, #PB_Gadget_WindowCoordinate)
Y = GadgetY(GadgetNumber, #PB_Gadget_WindowCoordinate)
Mx = WindowMouseX(0)
My = WindowMouseY(0)
GadgetHeight(GadgetNumber)
If Mx > X And Mx < (X + GadgetWidth(GadgetNumber)) And My > Y And My < (Y + GadgetHeight(GadgetNumber) )
ProcedureReturn 1
EndIf
ProcedureReturn 0
EndProcedure
Procedure WndCallback(hWnd, Msg, wParam, lParam)
Shared oldProc
Shared gadgetNumber
Select Msg
Case #WM_TIMER
If Not onMouseOver(gadgetNumber)
KillTimer_(hWnd, 123)
SetGadgetColor(gadgetNumber, #PB_Gadget_BackColor, $E1E1E1)
EndIf
Case #WM_MOUSEMOVE
If onMouseOver(gadgetNumber)
SetGadgetColor(gadgetNumber, #PB_Gadget_BackColor, $FCA3A3)
SetTimer_(hWnd, 123, 50, #Null) ;; 50ms timer
EndIf
EndSelect
ProcedureReturn CallWindowProc_(oldProc, hWnd, Msg, wParam, lParam)
EndProcedure
Procedure ButtonGadgetEx(g, x, y, w, h, text$="")
Shared oldProc
Shared gadgetNumber
gadgetNumber = g
ContainerGadget(g+100,x,y,w,h)
TextGadget(g,0,0,w,h, text$,#SS_CENTERIMAGE | #SS_CENTER | #SS_NOTIFY)
CloseGadgetList()
oldProc = SetWindowLongPtr_(GadgetID(g), #GWL_WNDPROC, @WndCallback())
SetGadgetColor(g,#PB_Gadget_BackColor,$E1E1E1)
EndProcedure
OpenWindow(0,0,0,510,280,"", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadgetEx(1, 30, 220, 130, 40, "Button 1")
ButtonGadgetEx(2, 180, 220, 130, 40, "Button 2")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow