Entwickler-Ecke

Multimedia / Grafik - Mausposition auslesen und verändern


DK99 - Mo 24.11.08 17:57
Titel: Mausposition auslesen und verändern
Hey
Ich bastel grad an nem 3D Projekt unter OpenGL und möchte mich da mitholfe der Maus bewegen können.
Dafür muss ich bei jedem OnIdle Aufruf testen ob die Maus bewegt wurde, einen Wert erhöhen und anschließend die Mausposition wieder auf ihren Ausgangspunkt setzten.
D.h. also dass die Maus immer in der Mitte meines Fensters sein soll.
Würde mich freuen wenn ihr mir da helfen könntet :)
LG


GericasS - Mo 24.11.08 18:06

Die Mausposition kannst du doch über OnMouseMove durch den x und y Wert erfahren :)


DK99 - Mo 24.11.08 18:46

Kann man da die Mausposition denn auch verändern ?
Das geht doch nicht oder?

Und irgentwie lief das mit dem OnMouseMove auch noch nicht bei mir.
Muss ich dass dann noch in der OnIdle Prozedur aufrufen oder ruft OnMouseMove sich selber auf?


jaenicke - Mo 24.11.08 18:51

OnMouseMove ist ein Ereignis, zum Beispiel des Formulars, das aufgerufen wird, wenn es eintritt, die Maus also bewegt wurde. Ob das auch mit OpenGL so funktioniert weiß ich nicht, aber ich gehe einfach mal davon aus, dass user profile iconGericasS weiß, dass das geht.

Um die Mausposition zu setzen / herauszufinden kannst du GetCursorPos [http://msdn.microsoft.com/en-us/library/ms648390(VS.85).aspx] und SetCursorPos [http://msdn.microsoft.com/en-us/library/ms648394(VS.85).aspx] verwenden:
http://www.delphipraxis.net/post169143.html
Ich vermute das geht auch mit OpenGL.


bummi - Mo 24.11.08 18:55

Screenweit:

x:=mouse.CursorPos.X;
....
SetCursorPos(x,y);

was geht nicht bei OnMouseMove


DK99 - Mo 24.11.08 20:42

Ahh das mit dem Set und get cursorpos klappt :)
dankeschön.
Wobei die Maus bei starken Bewegungen trotz zurücksetzen noch wackelt...(wahrscheinlich weil OnIdle zu selten aufgerufen wird)
Gibt es da irgentwas, wodurch man wirklich gar keine Mausbewegung mehr sehen kann?


jaenicke - Mo 24.11.08 21:42

Benutze doch einen Cursor innerhalb deines Programms, den man praktisch nicht sieht. Für mich hört sich das so an als wäre das für dich das sinnvollste.


Yogu - Mo 24.11.08 22:39

Wähle als Cursor crNone und blende mit OpenGL ein Zielkreuz oder etwas ähnliches ein (falls das überhaupt erwünscht ist). So machen das die meisten Spiele.


Bergmann89 - Di 25.11.08 00:46

HI,

gar keine Mausbewegung zu sehen wird schwer, es sei denn du schaltest sie auf deiner Form aus, wie Yogu schon gesagt hat.
Und das OnMouseMove-Ereigniss müsste auf deiner Form trotz OpenGL funzen?! Aber es ist sowieso besser bei OpenGL alles über das OnIdle-Ereigniss zu steuern, find ich.

MfG Bergmann.


Yogu - Di 25.11.08 10:24

Wenn du versuchst, in OnMouseMove die Mausposition zu ändern (SetCursorPos, wird eine Exception ausgelöst. Das ist also nicht die richtige Lösung.