Mausgesten mit dem BCB
-
Hallo zusammen!
Nach dem ich einige Zeit lang nach einer Implementierung von Mausgesten mit dem BCB gesucht habe, habe ich tatsächlich etwas gefunden (http://delphi.icm.edu.pl -> "BC++ B 5.0" -> "Apps WITH Sources") und wollte euch das nicht vorenthalten:
int TForm1::GetGestureDirection(TPoint start, int X, int Y) { // Rückgabewert entspricht Ziffer auf Nummernpad const dist = 20; int dx = X - start.x; int dy = Y - start.y; if(fabs(dx) < dist && fabs(dy) < dist) return 0; if(fabs(dx) < fabs(dy / 2)) { // Vertikale Bewegung if(dy > 0) return 2; if(dy < 0) return 8; } if(fabs(dy) < fabs(dx / 2)) { // Horizontale Bewegung if(dx > 0) return 6; if(dx < 0) return 4; } // Diagonale Bewegung if(dx > 0 && dy > 0) return 3; if(dx > 0 && dy < 0) return 9; if(dx < 0 && dy > 0) return 1; if(dx < 0 && dy < 0) return 7; return 0; } void __fastcall TForm1::Form1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(Button == mbRight) { prepgesture = true; startgesture.x = X; startgesture.y = Y; movegesture.x = X; movegesture.y = Y; gesture = ""; dirgesture = 0; dirrepgesture = 0; Canvas->MoveTo( X, Y ); Canvas->Pen->Width = 3; Canvas->Pen->Color = clRed; } } void __fastcall TForm1::Form1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(prepgesture) { Canvas->LineTo(X, Y); int dir = GetGestureDirection(movegesture, X, Y); if(dir > 0) { if(dir != dirgesture) { if(dirrepgesture == 0) gesture.Delete(gesture.Length(), 1); gesture += AnsiString(dir); dirgesture = dir; dirrepgesture = 0; } else dirrepgesture++; movegesture.x = X; movegesture.y = Y; } } } void __fastcall TForm1::Form1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(Button == mbRight) { prepgesture = false; Invalidate(); if(gesture != "") { // Maus runter if(gesture == "2") MessageBeep(0); // Maus runter, rechts if(gesture == "26") Close(); } } }Vielleicht ist das sogar etwas für die FAQ.

-
was mach ich damit?
-
-
Ich habe mir die MouseGestures.zip dort mal geladen, aber verstehe 0 was die exe nun machen soll. Könntest das bitte ein wenig noch erklären?!
-
Mit den Mausgesten kann man z.B. die Steuerung von Tabs in einem TabControl übernehmen. Ähnlich wie das Opera oder Firefox bieten.
In der Funktion Form1MouseUp() erfolgt erst die eigentliche Ausführung einer Aktion, die vorher durch GetGestureDirection() ermittelt wurde. Angenommen du hälst die rechte Maustaste und ziehst die Maus dann erst nach unten und dann nach rechts, dann wäre das Ergebnis aus dem Num-Pad 2 (runter) und 6 (rechts). die 2 und 6 werden in einen String geschrieben und dann verglichen. Also würde dieser Bewegung "26" im String stehen. In Form1MouseUp() führt der String "26" dann zu einer Aktion, nämlich dem Schließen der Form. Das ist eigentlich das ganze Prinzip dahinter.
Am besten baust du in Form1MouseUp() noch ein paar weitere Abfragen ab, die irgendwelche Funktionen ausführen, wie z.B. eine Messagebox werfen oder einen Sound abspielen. Dann findest du schon heraus, was macn da alles machen kann.
-
Ich Döddel habe die ganze Zeit linke Maustaste benutzt
ja nun macht das mit rechter Maustaste einen Sinn 
Black&White
-
nett nett
