MouseEventArgs global deklarieren
-
Hi,
für ein Programm würde ich gerne folgendes entwickeln:
Man klickt auf z.B.einen Button, worauf sich dieser mit der Mausbewegung mitbewegt
und beim nächsten Klick behält der Button seine neue Position bei.Ich habe versucht, dies über die button_MouseMove - Methode zu implementieren, aber das klappt nicht so richtig. Meine Frage ist es nun, ob ich irgendwie MouseEventArgs so deklarieren kann, dass ich wenn ich mit der Maus über den Button fahre, dann die Koordinaten von der Mausposition im Koordinatensystem des ganzen Formulars über die X,Y-Eigenschaft abrufen kann. Denn danke, so denke ich, wäre es sicher einfacher mein Vorhaben umzusetzen.
Für hilfreiche Ratschläge wäre ich dankbar
Gruß
sceche
-
Prinzip: Man kann einen Timer dafür verwenden, in dem man die Mouseposition abfragt.
Beispiel: (vorher natürlich Timerinterval z.B. auf 200 und Timer starten)
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
Point mp,mpt;mp=System::Windows::Forms::Cursor::Position::get();
mpt.X=abs(this->Location.X-mp.X+4); //Betrag ist der gültige Wert im Clientwindow
mpt.Y=abs(this->Location.Y-mp.Y+30); //4 und 30 für die Leisten, muss noch richtig abgefragt werdenthis->button1->Top=mpt.Y;
this->button1->Left=mpt.X;
}Für die abs() Funktion muss noch math.h includiert werden
EDIT: Ach ja, hatte ich vergessen...
Für die Mousebuttonabfrage verwendest Du:GetAsyncKeyState(VK_LBUTTON)
-
Yeah, wenn ich die Point-Variablen global definiere, und dann jeweils die Differenzen der neuen Mauspositionen mit der alten ausrechne und diese dann jeweils bei button1->Top und button1->Left addiere/subtrahiere funktioniert es!
Und bei kleineren timer-intervallen flackert es auch nicht mehr...
Vielen Dank
-
Die Umrechnung von Screen nach Client Koordinaten geht mit:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.pointtoclient.aspx
-
Danke für den Hinweis! Das vereinfacht nochmal so einiges