In einem OnClick-Ereignis von TImage möchte ich die x, y-Koordinaten der Maus extrahieren. Ich würde sie in Bezug auf das Bild bevorzugen, aber in Bezug auf die Form oder das Fenster ist genauso gut.Wie erhalte ich die Koordinaten der Maus, wenn ein Steuerelement angeklickt wird?
Antwort
Mouse.CursorPos enthält den TPoint, der wiederum die X- und Y-Position enthält. Dieser Wert befindet sich in globalen Koordinaten. Sie können also mithilfe der ScreenToClient-Routine, die Bildschirmkoordinaten in Fensterkoordinaten übersetzt, in Ihr Formular übersetzen.
Laut der Delphi-Hilfedatei kann Windows.GetCursorPos fehlschlagen, Mouse.CursorPos umschließt dies, um eine EOsException auszulösen, falls sie 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;
Wie wäre es damit?
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;
Fand dieses irgendwo einmal online und gespeichert es in meinem CodeSnippet :) DB
This page wird wahrscheinlich jedoch alle Ihre Fragen lösen ... Es erscheinen Funktionen vom Client an den Bildschirmkoordinaten zu gehen und zurück usw.
Viel Glück!
Wie schon andere gesagt haben, können Sie Mouse.CursorPos oder die GetCursorPos Funktion verwenden, aber Sie können auch behandeln nur die OnMouseDown oder OnMouseUp Ereignis statt OnClick. Auf diese Weise erhalten Sie Ihre X- und Y-Werte als Parameter für Ihre Ereignisbehandlungsroutine, ohne zusätzliche Funktionsaufrufe durchführen zu müssen.
Die Mouse.CursorPos
Eigenschaft wird Ihnen die aktuelle Position der Maus mitteilen. Wenn der Computer träge läuft oder wenn Ihr Programm nur langsam auf Nachrichten reagiert, ist es möglicherweise nicht mit der Position identisch, die die Maus beim ersten Auftreten des Ereignisses hatte. Um die Position der Maus zu erhalten, als die Maustaste geklickt wurde, verwenden Sie GetMessagePos
. Es meldet Bildschirmkoordinaten; übersetzen in Kundenkoordinaten mit TImage.ScreenToClient
.
Die Alternative besteht darin, die Ereignisse OnMouseDown
und OnMouseUp
selbst zu behandeln; ihre Parameter enthalten die Koordinaten. Denken Sie daran, dass sowohl Ereignisse auftreten müssen, damit ein klicken auftritt. Möglicherweise möchten Sie auch Drag Operationen erkennen, da Sie wahrscheinlich nicht einen Ziehvorgang als Klick zählen möchten.