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





