Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mausposition außerhalb eines Formulars bestimmen (https://www.delphipraxis.net/31192-mausposition-ausserhalb-eines-formulars-bestimmen.html)

dEluXe 5. Okt 2004 22:36


Mausposition außerhalb eines Formulars bestimmen
 
Hallo zusammen,

ich weiß das Thema mit der Mausposition wurde schon oft besprochen, aber ich habe jetzt folgendes Problem:

Ich möchte die x und y - Koordinaten des Mauszeigers (im Verhältnis zum gesamten Bildschirm) außerhalb des Formulares rausfinden.
Benutze ich:
Delphi-Quellcode:
label1.Caption := inttostr(x);
label2.Caption := inttostr(y);
werden sobald ich das Formular mit dem Mauszeiger verlasse die Koordinaten nicht mehr aktualisiert.
(außerdem werden nur die Koordinaten der Form und nicht vom ganzen Bildschirm ausgegeben)

Bei
Delphi-Quellcode:
  var p: tpoint;
begin
  p := mouse.CursorPos;
  label1.Caption := inttostr(p.x);
  label2.Caption := inttostr(p.y);
hab ich wenigstens schon die richtigen Koordinaten jedoch werden auch diese beim Verlassen des Formulars nicht mehr aktualisiert.

Vielleicht habt ihr eine Lösung für das Problem.

Vielen Dank im Voraus

alcaeus 5. Okt 2004 22:53

Re: Mausposition außerhalb eines Formulars bestimmen
 
Hi dEluXe,

der einzige weg wird wohl über [dp]"Hooks"[/dp] sein.

Greetz
alcaeus

Tubos 5. Okt 2004 23:17

Re: Mausposition außerhalb eines Formulars bestimmen
 
Zitat:

der einzige weg wird wohl über Hooks sein.
Geht das nicht auch über MSDN-Library durchsuchenGetCursorPos oder habe ich die Frage falsch verstanden? :gruebel:

alcaeus 5. Okt 2004 23:22

Re: Mausposition außerhalb eines Formulars bestimmen
 
Hi Lukas,

Zitat:

Zitat von dEluXe
hab ich wenigstens schon die richtigen Koordinaten jedoch werden auch diese beim Verlassen des Formulars nicht mehr aktualisiert.

So wie ich es verstanden habe, will er über eine Änderung der Mauskoordinaten benachrichtigt werden (so wie im OnMouseMove, welches allerdings nur funktioniert, solange die Maus über dem Formular ist).
Es gibt zwar noch einen Weg über den Timer (alte Mauskoordinaten mit aktuellen vergleichen), allerdings denke ich ist ein Hook wahrscheinlich besser: Beim Timer werden die Mauskoordinaten auch verglichen, wenn sich die Maus nicht bewegt.

Greetz
alcaeus

Luckie 6. Okt 2004 00:13

Re: Mausposition außerhalb eines Formulars bestimmen
 
Zitat:

Zitat von alcaeus
der einzige weg wird wohl über [dp]"Hooks"[/dp] sein.

Falsch. Es geht auch anders. Siehe dazu MSDN-Library durchsuchenSetcapture.

dEluXe 6. Okt 2004 01:34

Re: Mausposition außerhalb eines Formulars bestimmen
 
HiHo,

Also als erstes mal vielen Dank für die schnellen Antworten auf meine Frage.

@Tubos
Also mit GetCursorPos tritt das gleiche Problem auf (außerhalb des Formulars gehts nicht mehr):
Delphi-Quellcode:
var
  pos : tpoint;
begin
  getcursorpos(pos);
  label1.Caption := inttostr(pos.x);
  label2.Caption := inttostr(pos.y);
@alcaeus
Ich (mittel fortgeschrittener Anfänger :wink: ) hab mal nach Informationen und Tutorials zum Thema HOOKS gesucht und hab bei dem, was ich da gefunden hab, nur verdammt wenig verstanden,
sodass ich mich erstmal an der Variante von Luckie mit dem SETCAPTURE versuchen werde.

Über Beispiele würd ich mich freuen.

dEluXe

himitsu 6. Okt 2004 02:50

Re: Mausposition außerhalb eines Formulars bestimmen
 
Also wenn du uns mal verraten hättest, dass du das im onMouseMove-Ereignis deines Forms machst, dann hätten wir dir auch sagen können, das es zwar geht, aber eben nicht so, wie du es machst.
mouse.CursorPos und getcursorpos(...) geben ja immer die richtigen Werte aus, auch wenn sie nicht über dem Form sind, nur wird halt onMouseMove, so wie es halt der Name sagt, nur ausgelöst, wenn sich die Maus innerhalb des Forms verändert, also entweder du machst das mit Hooks, oder diesem komischen SetCapture, oder du nimmst 'nen Timer ...


Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var p: tpoint;
begin
  p := mouse.CursorPos;
  label1.Caption := inttostr(p.x);
  label2.Caption := inttostr(p.y);
end;

oder

procedure TForm1.Timer1Timer(Sender: TObject);
var pos: tpoint;
begin
  getcursorpos(pos);
  label1.Caption := inttostr(pos.x);
  label2.Caption := inttostr(pos.y);
end;
Eventuell kannst du ja noch die Position zwischenspeichern und dann nur bei Veränderung was machen.
z.B.:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var pos: tpoint;
begin
  getcursorpos(pos);
  if pos.X shl 16 + pos.Y <> Tag then exit;
  Tag := pos.X shl 16 + pos.Y;
  ...
  label1.Caption := inttostr(pos.X);
  label2.Caption := inttostr(pos.Y);
  ...
end;
(ein Timer mit so um die 20 bis 100 Millisekunden sollte wohl reichen)

Tubos 6. Okt 2004 06:54

Re: Mausposition außerhalb eines Formulars bestimmen
 
Zitat:

So wie ich es verstanden habe, will er über eine Änderung der Mauskoordinaten benachrichtigt werden (so wie im OnMouseMove, welches allerdings nur funktioniert, solange die Maus über dem Formular ist).
Es gibt zwar noch einen Weg über den Timer (alte Mauskoordinaten mit aktuellen vergleichen), allerdings denke ich ist ein Hook wahrscheinlich besser: Beim Timer werden die Mauskoordinaten auch verglichen, wenn sich die Maus nicht bewegt.
aha, verstehe.

himitsu 6. Okt 2004 09:48

Re: Mausposition außerhalb eines Formulars bestimmen
 
na da hab'sch doch einen überlesen ... tschuldsche alci -.-''

MisterNiceGuy 6. Okt 2004 10:26

Re: Mausposition außerhalb eines Formulars bestimmen
 
Ich hab das für meinen Perfect Simulator schon mit getcursorpos bewerkstelligt und das hat funktioniert...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz