Please try this:Paul wrote: Mon May 23, 2022 5:06 pm Yes those PB commands work on a 4K monitor but there seems to be issues with how you calculate positions and offsets and I guess you are not going to see them without using a high DPI 4K monitor.
Code: Select all
EnableExplicit
Define.i Event
Enumeration
#Window
#Canvas
EndEnumeration
#X = 60
#Y = 50
#Width = 80
#Height = 50
Procedure.i dpiX(Num.i)
ProcedureReturn DesktopScaledX(Num)
EndProcedure
Procedure.i dpiY(Num.i)
ProcedureReturn DesktopScaledY(Num)
EndProcedure
Procedure _MouseMoveHandler()
Define.i X, Y
Define.i Gadget = EventGadget()
If Gadget = #Canvas
X = GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)
If X > dpiX(#X) And X < dpiX(#X + #Width)
If Y > dpiY(#Y) And Y <= dpiY(#Y + #Height)
SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)
GadgetToolTip(Gadget, "X: " + Str(X) + " (" + Str(DesktopUnscaledX(X)) + ") / Y: "+Str(Y) + " (" + Str(DesktopUnscaledY(Y)) + ")")
ProcedureReturn #True
EndIf
EndIf
EndIf
SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Default)
EndProcedure
;- ----- Main -----
If OpenWindow(#Window, 0, 0, 220, 170, "Module - Example", #PB_Window_SystemMenu|#PB_Window_Tool|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
If CanvasGadget(#Canvas, 10, 10, 200, 150)
If StartDrawing(CanvasOutput(#Canvas))
DrawingMode(#PB_2DDrawing_Outlined )
Box(dpiX(#X), dpiY(#Y), dpiX(#Width), dpiY(#Height), #Red)
Debug "Box X: " + Str(dpiX(#X)) + " / Y: "+ Str(dpiY(#Y))
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, dpiX(GadgetWidth(#Canvas)), dpiY(GadgetHeight(#Canvas)), $808080)
StopDrawing()
EndIf
BindGadgetEvent(#Canvas, @_MouseMoveHandler(), #PB_EventType_MouseMove)
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CloseWindow(#Window)
EndIf