Maus-Gestenerkennung mit Delphi
Verfasst am: Freitag, 16. Nov. 2012 um 18:45Von Handys bzw. von Tablet-PCs kennt man bereits die Erkennung von Gesten, die man per Finger mehr oder weniger auf die Displays schmiert. Spätestens mit Windows 8 dringt diese Technik nun auch in die Windows-Welt vor. Daher habe ich mir vorgenommen, zu prüfen, ob der Einsatz einer Gestensteuerung im BVASystem sinnvoll ist und mit welchem Aufwand es sich umsetzten lässt. Als Ergebnis ist nun erstmal eine kleine Mini-Anleitung entstanden, die beschreibt, wie man Gesten in Delphi einsetzen kann.
Glücklicherweise muss man die Erkennung der Gesten in Delphi nicht selber entwickeln. Sogar einige gut funktionierende Standardgesten sind bereits definiert. Generell würde ich erst einmal empfehlen, keine eigenen Gesten zu definieren. Meine Versuche eine „6“ als Geste zu definieren, scheiterten daran, das sie zu nah an meiner Handschrift lagen. Durch einen vergrößerten Toleranzbereich konnte ich das Problem entschärfen. Allerdings wurden dann plötzlich auch andere Gesten als „6“ erkannt.
Um in der eigenen Anwendung Gesten zu verwenden, sind nur einige kleine Schritte notwendig:
Hinzufügen eines TGesturemanagers
Der erste und einfachste Schritt ist das Hinzufügen einer Komponente vom Typ TGesturemanager zum Dialog, in dem die Gesten verwendet werden sollen. Den Gestenmanager kann man sich wie eine Gesten-Bibliothek vorstellen. Er dient zur Definition und Speicherung der Gesten, die verwendet werden sollen. Nach dem Hinzufügen enthält er bereits 34 definierte Standardgesten. Zusätzliche eigene Gesten können definiert werden, indem man doppelt auf die Komponente klickt.
Verknüpfen des Gestenmanagers
Als nächstes muss die Komponente bzw. die Komponenten, die auf Gesten reagieren sollen, mit dem Gestenmanager verknüpft werden. Dazu sucht man im Objekt Inspektor nach der Eigenschaft „Touch“. Als Untereintrag davon findet man den Eintrag „Gesturemanager“ und wählt dort den eben hinzugefügten Gestenmanager aus.
Auswahl der Gesten
Anschließend kann man unter „Gestures“ die gewünschten Gesten auswählen, indem man auf die jeweiligen Checkboxen klickt. Nun hat man 2 Möglichkeiten: Die einfachere Möglichkeit ist sicher, wenn man die Geste direkt im Objektinspektor mit einer TAction verknüpft.
Hat man keine TAction verwendet, so kann die gewünschte Funktionalität in dem Event OnGesture() implementieren. Der Quelltext dazu könnte zum Beispiel in etwa so aussehen:
procedure TBVAVollbild.ImageGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
case EventInfo.GestureID of
sgiLeft: begin
showmessage('Nach Links');
end;
sgiRight: begin
showmessage('Nach rechts');
end
else showmessage('Unbekannte Geste');
end;
end;
Anschließend kann nun bereits getestet werden, ob die ausgewählten Gesten funktionieren.