TImageMouseMove und Logikfehler
-
Hi!
Ich habe ein kleines Problem mit den Mouse-Funktionen vom C++ Builder. Ich möchte, dass sich das Bild im TImage dreht, wenn die Mouse sich bewegt und gleichzeitig die linke Mous-Taste gedrückt ist. Also wenn sie die Mouse waagerecht bewegt, soll sich das Bild um die Y-Achse drehen und senkrecht halt um die X-Achse.
Das Drehen funktioniert in einer Funktion Auslesen(), die schon fertig ist und auch funktioniert. Es geht jetzt eigentlich darum, dass die Funktion Auslesen() immer dann aufgerufen wird, wenn sich die Mouseposition bei gedrückter linken Moustaste verändert.
Hier meine bisherige Lösung:
void __fastcall TFrMain::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { MouseDwn = true; } void __fastcall TFrMain::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { MouseDwn = false; } void __fastcall TFrMain::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { while(MouseDwn) { turnradx = (X * 360)/Image1->Width; turnrady = (Y * 360)/Image1->Height; Auslesen(turnradx); if(MouseDwn=false) break; } }
Leider wird Auslesen() jetzt nur aufgerufen, wenn ich die Moustaste loslasse. Hat jemand eine Lösung für mein Problem und kann sie hier posten? Wäre klasse. Ich habe auch in der Suche gesucht, aber leider nichts gefunden
-
hm, naja, ich habe jetzt eine Lösung. ist zwar nicht so elegant, aber klappt
ich habe diesen Code noch mit eingebaut. Also immer, wenn die Maustaste gedrückt ist (MouseDwn = true), setzt der timer ein und macht jede hundertstel Sekunde einen Funktionsaufruf von Auslesen().
void __fastcall TFrMain::TimerTimer(TObject *Sender) { if(MouseDwn) { Timer->Enabled = false; Auslesen(turnradx); Timer->Enabled = true; } }
besser als nichts
-
hi,
das Problem ist, daß die While-Schleife nicht mehr verlassen wird, solange die MouseTaste gedrückt ist. Damit hängt das System, bis man die MausTaste losläßt.
Einfach aus dem While ein if, dann gehts.snoopy_kmo