delphimousetimage

How do I get the coordinates of the mouse when a control is clicked?


In a TImage's OnClick event, I would like to extract the x,y coordinates of the mouse. I would prefer them in relation to the image, but in relation to the form or window is just as good.


Solution

  • Mouse.CursorPos contains the TPoint, which in turn contains the X and Y position. This value is in global coordinates, so you can translate to your form by using the ScreenToClient routine which will translate screen coordinates to window coordinates.

    According to the Delphi help file, Windows.GetCursorPos can fail, Mouse.CursorPos wraps this to raise an EOsException if it fails.

    var
      pt : tPoint;
    begin
      pt := Mouse.CursorPos; 
      // now have SCREEN position
      Label1.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
      pt := Image1.ScreenToClient(pt);
      // now have Image position
      Label2.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
    end;
    

    Note: if you leave out the "Image1" for the ScreenToClient method, it will refer to the form.