delphi - How do I get the absolute mouse co-ordinates when mouse is over a control -
i want absolute co-ordinates of mouse when mouse on control has been placed on host control. e.g. host control panel button placed on panel. want mouse co-ordinates relative panel when mouse on button.
i have tried obvious see get:
procedure tfmworkingscreen.pnlscreenareamousemove(sender: tobject; shift: tshiftstate; x, y: integer); begin statusbar1.simpletext := 'left ' + inttostr(x) + ' right ' + inttostr(y); end; clearly work when mouse on panel control. there way required co-ordinates?
add onmousemove event handler child control, button in example. in onmousemove event handler receive x , y cursor coordinates respect child control's client area. if host control immediate parent of control onmousemove event has fired use control's clienttoparent method:
var posrelparent: tpoint: .... posrelparent := (sender tcontrol).clienttoparent(point(x, y)); if parent control may further parent/child relationship can pass parent control clienttoparent:
posrelparent := (sender tcontrol).clienttoparent(point(x, y), theparent); if wish express position relative arbitrary controls client area can converting via screen coordinates, global frame of reference.
var posrelscreen, posrelothercontrol: tpoint: othercontrol: twincontrol; .... posrelscreen := (sender tcontrol).clienttoscreen(point(x, y)); posrelothercontrol := othercontrol.screentoclient(posrelscreen); as 1 final offering, can use getmessagepos obtain screen relative coordinates of mouse last message retrieved call getmessage.
var msgpos: tpoint; .... msgpos := tsmallpoint(getmessagepos()); at point can use somecontrol.screentoclient(msgpos) coordinates of cursor relative control's client area. makes sense call getmessagepos if in event handler triggered queued mouse message.
Comments
Post a Comment