Entwickler-Ecke

Sonstiges (Delphi) - Maus position in der Form/ im Image bestimmen


$ebbi - Mi 03.11.10 16:26
Titel: Maus position in der Form/ im Image bestimmen
Hi,

ich würd gerne die Mausposition in einer Form/ einen Image bestimmen. Bisher nimmt er bei mir aber immer den ganzen Bildschirm. Wie kann ich das nur auf die Form beschränken, also das in der linken oberen Ecked der Form 0,0 ist?


ALF - Mi 03.11.10 16:36

Liefern die Ereignisse onMouseMove, onMouseDown usw nicht die x,y Koordinaten der Mouse?

Gruss ALf


$ebbi - Mi 03.11.10 16:42

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Liefern die Ereignisse onMouseMove, onMouseDown usw nicht die x,y Koordinaten der Mouse?

Gruss ALf



ja aber dann müsst ich klicken oder und dass soll eben nicht gemacht werden


ALF - Mi 03.11.10 16:44

Schau doch mal bei onMouseMove rein :wink:
Gruss Alf


$ebbi - Mi 03.11.10 16:49

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Schau doch mal bei onMouseMove rein :wink:
Gruss Alf


merci :D


ALF - Mi 03.11.10 16:57

Wenn Du mehrere Objekte dem gleichen Ereigniss zuordnest, in diesem Fall OnMouseMove, kannst Du über den Sender erfahren auf welchem Objekt Du gerade bist.
Nur so als Tipp. :wink:

Gruss ALf


beastofchaos - Fr 24.12.10 18:54

user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
ich würd gerne die Mausposition in einer Form/ einen Image bestimmen. Bisher nimmt er bei mir aber immer den ganzen Bildschirm. Wie kann ich das nur auf die Form beschränken, also das in der linken oberen Ecked der Form 0,0 ist?


Es hat noch keiner geklärt, wie man die Mausposition in dem Form bestimmt, sondern nur in welcher procedure/ auf welche Weise man sie lesen kann :)

Mein Problem ist in meinem Minigolfprogramm, dass ich eine Linie von der kugel zur Maus malen will.
Da er die Position der Maus von dem ganzen Bildschirm liest, muss ich folgende Formeln jedesmal benutzen und auch dann ist es sehr ungenau je nach Bildschirmgröße*:
"x:=Mouse.CursorPos.x - Form1.Left;
y:=Mouse.CursorPos.y - Form1.Top;"

*Bei meinem 24-Zoll-Bildschirm zuhause muss ich bei x "-29" und bei y "-8" an die Rechnung anhängen. In der Schule ist es, glaube ich, deshalb weniger, da wird dort nur 18-Zoll-Bildschirme haben. Kennt ihr eine Formel, die vll ungefähr so lautet: "x:=Form1.CursorPos.x;"

MfG Thomas


jaenicke - Fr 24.12.10 19:13

Benutze einfach ScreenToClient von der Komponente, auf die du die Koordinaten beziehen willst. ;-)


beastofchaos - Sa 25.12.10 02:37

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Benutze einfach ScreenToClient von der Komponente, auf die du die Koordinaten beziehen willst. ;-)


Wie muss ich das benutzen, als Funktioon?
Also:

Delphi-Quelltext
1:
x:=ScreenToClient(Mouse.CursorPos.X);                    
-> Das geht bei mir nämlich nicht wegen:
Zitat:
[Error] Unit1.pas(95): Incompatible types: 'TPoint' and 'Integer'


edit1:
Hab mich mal erkundigt und habs verstanden, danke für die Hilfe. sieht jetzt so bei mir aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Maus=TPoint;
.
.
.
Maus:=ScreentoClient(Mouse.CursorPos);
x:=Maus.x;
y:=Maus.y;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Delete - Sa 25.12.10 02:40

Dann guck dir mal den Datentyp TPoint in der Hilfe an.


beastofchaos - Sa 25.12.10 03:18

Hab ich ja jetzt schon. Geht das auch mit ScreenToImage2 oder etwas öhnliches. Also, dass ich eine Linie nur erzeuge, wenn die Maus in diesem Bereich des Forms ist?


jaenicke - Sa 25.12.10 03:19

user profile iconbeastofchaos hat folgendes geschrieben Zum zitierten Posting springen:
Hab ich ja jetzt schon. Geht das auch mit ScreenToImage2 oder etwas öhnliches.
:roll:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Benutze einfach ScreenToClient von der Komponente, auf die du die Koordinaten beziehen willst. ;-)
Wenn du da (wie du gepostet hast) die Methode des Formular nimmst, beziehen sich die Koordinaten eben auch darauf. :nixweiss:


platzwart - Sa 25.12.10 13:03


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Maus=TPoint;
.
.
.
Maus:=Image2.ScreentoClient(Mouse.CursorPos);
x:=Maus.x;
y:=Maus.y;


Wenn du das nicht explizit angibst, bezieht sich alles auf dein Hauptformular.