Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Mauszeigerposition ungleich Mauszeigericonposition (https://www.delphipraxis.net/153431-mauszeigerposition-ungleich-mauszeigericonposition.html)

Noobmaster 2. Aug 2010 18:23

Mauszeigerposition ungleich Mauszeigericonposition
 
Hallo Leute!
Ich bewege in meinem Programm ein Bild, indem ich es immer an die Cursorposition setze. Jetzt ist mir allerdings aufgefallen, dass das Bild des Cursors von meinem Bild im Fenstermodus weit weg ist. Im Vollbildmodus stimmen die Positionen überein. Im Fenstermodus stört das, da wenn ich einen Mausklick ausführe, wird eine Procedure aufgerufen. Allerdings befindet sich der Mauszeiger dann häufig außerhalb des Fensters.
Woher könnte dieses mir unverständliche Phänomen kommen und wie kann ich das Problem lösen? Ich habe es mit SetCursorPos probiert, aber die Cursorposition ist wie gesagt zur tatsächlichen Position des Cursorbildes weit entfernt (genau genommen immer weiter oben links)
Danke schonmal für die Antworten

DeddyH 2. Aug 2010 18:27

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
Wie ermittelst Du denn die Mausposition? Ich habe den Verdacht, dass Dir ScreenToClient weiterhelfen könnte.

Noobmaster 3. Aug 2010 21:43

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
In der FormClick-Procedure habe ich z.B. folgendes stehen:
Delphi-Quellcode:
Image.X := Mouse.CursorPos.X;
Image.Y := Mouse.CursorPos.Y;
Was ist eigentlich ein ScreenToClient?
Also im Prinzip, würde ich einfach nur gerne wissen, wie ich den Cursor wieder an die richtige Stelle bekomme (laut Mouse.CursorPos ist er ja an der richtigen Stellen.

Matze 3. Aug 2010 21:48

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
"Mouse.CursorPos" bezieht sich auf die Bildschirmkorrdinaten. Die des TImages beziehen sich auf dein Formular.
Daher diese Unterschiede.

Würde sich dein Formular am Bildschirm exakt oben links befinden, müssten die Koordinaten übereinstimmen.

Nimm doch das OnMouseDown-Ereignis:
Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.Left := X;
  Image1.Top := Y;
end;

himitsu 3. Aug 2010 21:54

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
OnClick ... wieso nicht OnMouseDown? Dort bekommst du direkt die richtigen Koordinaten gelefert.

Zitat:

Zitat von Noobmaster (Beitrag 1039366)
Was ist eigentlich ein ScreenToClient?

Schonmal in der OH gesehn?

[edit]
wo kommt plötzlich der Matze her? der war vor 'ner Minute noch nicht da
und auch nimma 'ne Redbox gab's (falls ich doch länger zum antworten brauchte)

Amateurprofi 4. Aug 2010 00:33

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
Zitat:

Zitat von Matze (Beitrag 1039367)
"Mouse.CursorPos" bezieht sich auf die Bildschirmkorrdinaten. Die des TImages beziehen sich auf dein Formular.
Daher diese Unterschiede.

Würde sich dein Formular am Bildschirm exakt oben links befinden, müssten die Koordinaten übereinstimmen.

Nein, m.E. auch dann nicht, weil sich die Koordinaten des TImage nicht auf das Formular sondern auf die ClientArea des Formulars beziehen.
Dazwischen liegt in der Horizontalen der Rand des Formulars und in der Vertikalen der Rand, die Caption und ggfs. das MainMenu des Formulars.
Es sei denn es handelt sich um ein rahmenloses Formular ohne Caption und ohne MainMenu.

Matze 4. Aug 2010 05:31

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
Zitat:

Zitat von Amateurprofi (Beitrag 1039384)
Nein, m.E. auch dann nicht, weil sich die Koordinaten des TImage nicht auf das Formular sondern auf die ClientArea des Formulars beziehen.

Du hast Recht, kleiner Denkfehler meinerseits. ;)

Noobmaster 4. Aug 2010 08:20

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
Zitat:

Zitat von himitsu (Beitrag 1039370)
OnClick ... wieso nicht OnMouseDown? Dort bekommst du direkt die richtigen Koordinaten gelefert.

Weil ich die Koordinaten eigentlich nur dann brauche (berechne genau zu dem Zeitpunkt einen Vektor, aber ich werde das ganze jetzt mit dem OnMouse-Ereignis machen.
Danke!

himitsu 4. Aug 2010 08:31

AW: Mauszeigerposition ungleich Mauszeigericonposition
 
OK, zum Zeitpunkt von OnClick wäre OnMouseUp passender.

OnClick = OnMouseDown+OnMouseUp, wobei beim Loslassen der Taste das Ereignis ausgelöst wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.

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