Wie kann ich die Koordinaten der Maus erhalten, wenn ein Steuerelement angeklickt wird?

StackOverflow https://stackoverflow.com/questions/826914

  •  05-07-2019
  •  | 
  •  

Frage

In einem OnClick-Ereignisse des TImage, würde Ich mag die x, y-Koordinaten der Maus zu extrahieren. Ich würde sie in Bezug auf das Bild bevorzugen, aber in Bezug auf die Form oder das Fenster ist genauso gut.

War es hilfreich?

Lösung

Mouse.CursorPos enthält das TPoint, was wiederum die X- und Y-Position enthält. Dieser Wert ist in globalen Koordinaten, so können Sie mit Hilfe der ScreenToClient Routine zum Formular übersetzen, die Bildschirmkoordinaten an Fensterkoordinaten übersetzen.

Nach der Delphi-Hilfedatei kann Windows.GetCursorPos scheitern, Mouse.CursorPos diese wickelt einen EOsException zu erhöhen, wenn es fehlschlägt.

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

Andere Tipps

Die Mouse.CursorPos Eigenschaft wird Ihnen die Strom Position der Maus. Wenn der Computer nur schleppend läuft, oder wenn Ihr Programm ist langsam, um Nachrichten zu antworten, dann ist es vielleicht nicht das gleiche wie die Position sein, die Maus hatte, wenn das OnClick Ereignis zuerst eintrat. Um die Position der Maus zu erhalten zu der Zeit wurde die Maustaste geklickt , verwenden Sie GetMessagePos . Es meldet Bildschirmkoordinaten ; übersetzen in Client-Koordinaten mit TImage.ScreenToClient.

Die Alternative ist die OnMouseDown und OnMouseUp Ereignisse selbst zu behandeln; deren Parameter die Koordinaten. Beachten Sie, dass beide Veranstaltungen für ein, um auftreten müssen auf auftreten. Sie sollten auch erkennen drag Operationen, da würden Sie wahrscheinlich keinen Widerstand zu rechnen als mit einem Klick zu betrachten.

Wie schon andere gesagt haben, können Sie Mouse.CursorPos oder die GetCursorPos Funktion verwenden, aber Sie können auch nur das Ereignis OnMouseDown oder OnMouseUp behandeln statt OnClick. So können Sie Ihre X- und Y-Werte als Parameter in den Ereignishandler erhalten, ohne zusätzliche Funktionsaufrufe zu müssen.

Wie wäre das?

procedure TForm1.Button1Click(Sender: TObject);
var
MausPos: TPoint;
begin
  GetCursorPos(MausPos);
  label1.Caption := IntToStr(MausPos.x);
  label2.Caption := IntToStr(MausPos.y);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  SetCursorPos(600, 600);
end;

Dieses Online irgendwo einmal gefunden und gespeichert es in meinem CodeSnippet DB:)

Auf dieser Seite werden wahrscheinlich jedoch alle Ihre Fragen lösen .. erscheinen. Es Funktionen werden von Client gehen Koordinaten zu screenen und zurück etc ..

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top