Thank you, dear colleagues, for your comprehensive tips.
Can this theory, I received from you, also be extended to ImageGadget, especially if 3 states are used?
These are the solutions commonly used by a disliked here on the forum antivirus , program - Eset. (I don't like Eset either, because it interferes every now and then (in this sense, it's a virus), but I decided to survive until the end of the paid subscription). However, I like Eset's graphical interface solutions.
Below is analyzed code, with links to graphic files.
Code: Select all
;If Procedure IsMouseOver is in Enumeration there are problems
Procedure IsMouseOver(hWnd)
GetWindowRect_(hWnd,r.RECT)
GetCursorPos_(p.POINT)
Result = PtInRect_(r,p\y << 32 + p\x)
ProcedureReturn Result
EndProcedure
EnableExplicit
Enumeration
#ButtonImage_fp
#ButtonImage_fp_hover
#ButtonImage_fp_pressed
#ButtonImage_sp
EndEnumeration
Define fp
Define fp_hover
Define fp_pressed
Define sp
Define hWnd
Global r.RECT
Global p.POINT
Define Result
Define Quit
fp = LoadImage(3,"first_picture1.bmp")
fp_hover = LoadImage(4,"first_picture_hover1.bmp")
fp_pressed = LoadImage(5,"first_picture_pressed1.bmp")
sp = LoadImage(6,"second_picture2.bmp")
If OpenWindow(0, 0, 0, 500, 310, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; ButtonImageGadget(#ButtonImage_fp , 20, 70, 200, 200,ImageID(3))
;SetGadgetAttribute(#ButtonImage_fp, #PB_Button_PressedImage, ImageID(5))
ImageGadget(#ButtonImage_sp, 280, 70, 200, 200,ImageID(6))
ButtonGadget(2, 280, 20, 200, 28, "Button without hand cursor")
Define Button.WNDCLASS
GetClassInfo_(0, "Button", Button)
Button\hCursor = LoadCursor_(0, #IDC_HAND)
Button\style & ~#CS_GLOBALCLASS
RegisterClass_(@Button)
ButtonGadget(1, 20, 20, 200, 28, "Button with hand cursor", 0)
SetWindowPos_(GadgetID(1), #HWND_TOP, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOACTIVATE)
ImageGadget(#ButtonImage_fp , 20, 70, 200, 200,ImageID(3))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #WM_MOUSEMOVE
If IsMouseOver(GadgetID(#ButtonImage_fp))
SetGadgetState(#ButtonImage_fp,ImageID(4))
Else
;#ButtonImage_sp
SetGadgetState(#ButtonImage_fp,ImageID(3))
EndIf
Case #WM_LBUTTONDOWN
If IsMouseOver(GadgetID(#ButtonImage_fp))
;Pressed(10)
SetGadgetState(#ButtonImage_fp,ImageID(5))
Else
SetGadgetState(#ButtonImage_fp,ImageID(3))
EndIf
Case #PB_Event_CloseWindow
EndSelect
Until Quit = 1
End
EndIf
Here are graphic files:
https://lokus.com.pl/hand_cursor.zip