Gestes Delphi - John COLIBRI. |
- résumé : gestes Delphi (== "Delphi Gestures" =="mouvements delphi") : gestion Delphi des mouvements effectués par un utilisateur avec le doigt sur un écran tactile
- mots clé : écran tactile - Delphi Gesture - OnGesture - Touch
- logiciel utilisé : Windows XP personnel, Delphi Xe3
- matériel utilisé : Pentium 2.800 Mhz, 512 Meg de mémoire, 250 Giga disque
dur (pour compiler) - PackBell Window 7 - Ecran tactile iiYama t2250Mts
- champ d'application : Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3
- niveau : développeur Delphi
- plan :
1 - Delphi Gestures
Les Gestes Delphi (mouvements Delphi) utilisent le toucher sur un écran tactile pour gérer des événements. Une application typique est un écran dans une gallerie marchande pour trouver
un magasin, ou un écran dans un restaurant permettant au garçon de sélectionner les plats. Le toucher du doigt remplace donc la souris ou les raccourcis clavier pour interagir avec le programme. Le garçon a un plateau dans une main et ne peut
pas pointer avec la souris (caractères trop petits) ou le clavier (une main est occupée). Le doigt pour sélectionner des pavés à l'écran, ou esquisser des "mouvements" sont ici appropriés.
Nous avons mentionné LE DOIGT. La mécanique est en fait plus générale: - la souris peut aussi être utilisés si nous n'avons pas d'écran tactile. A notre avis, il s'agit uniquement d'une solution de dépannage, ou d'un moyen
de développer un logiciel fonctionnant avec un écran tactile sans avoir à en acheter un. Les mouvements de la souris seront interprétés (appelleront les mêmes événements Delphi) que le doigt
- d'autres moyens que le doigt peuvent aussi être utilisés, comme un stylet sur un touch pad
- et à la place d'en écran tactile, nous pouvons aussi avoir un touchpad, un téléphone mobile, une tablette etc
Nous pouvons gérer les gestes depuis Delphi 2010. Mentionnons simplement qu'il y a eu de légères modifications entre Delphi Xe2 et Delphi Xe3 à cause de report de Delphi Mobile : les options des tablettes ne figurent plus dans
l'Inspecteur d'Objet. Elles seront vraissemblablement réintroduites avec le package Delphi Mobile, vers Janvier 2013
Dans cet article, nous utiliserons Delphi Xe3
2 - Les deux mode de gestion des mouvements Nous pouvons utiliser les gestes de deux façons: - créer un événement tWinControl.OnGesture
- utiliser les actions, qui comportent à présent des actions prédéfinies pour les gestes
2.1 - OnGesture Commençons par utiliser directement OnGesture
Pour utiliser le geste - nous cochons le(s) geste(s) qui nous intéresse(nt)
- nous créons un événement OnGesture sur le contrôle qui nous intéresse (Panel1 dans notre cas), en analysant l'identificateur du geste détecté par GestionManager1
- l'événement OnGesture a un paramètre tGestureEventInfo, qui est défini par :
Type TGestureEventInfo = Record
GestureID: TGestureID;
Location: TPoint;
Flags: TInteractiveGestureFlags;
Angle: Double;
InertiaVector: TSmallPoint;
Case Integer Of
0: (Distance: Integer);
1: (TapLocation: TSmallPoint);
End; // TGestureEventInfo |
Voici un exemple qui affiche dans OnGesture le nom du geste: | cochez quelques gestes, par exemple Left et Triangle |
| ajoutez après Implementation |
| créez l'événement Panel1.OnGesture, et affichez les informations sur le geste. Par exemple:
Procedure TForm1.Panel1Gesture(Sender: TObject;
Const EventInfo: TGestureEventInfo; Var Handled: Boolean);
Var l_gesture_name: String; Begin
display('ongesture');
With EventInfo Do Begin
GestureToIdent(GestureID, l_gesture_name);
display(Format(' %d %s', [GestureID, l_gesture_name]));
End; Handled := True;
End; // Panel1Gesture | | |
compilez et effectuez un geste vers la gauche, un triangle (sens des aiguilles d'une montre ou contraire) et un geste quelconque (diagonale vers le bas) | |
voici le résultat: |
2.2 - Utilisation de tAction
Le principe des tAction est de centraliser dans une Procédure un traitement qui peut avoir été provoqué par l'utilisateur de différentes manières - un clic souris sur un tButton
- un clic souris sur tMenuItem
- un raccourci clavier
- un geste du doigts ou avec un stylet
Pour cela, il suffit de créer une tAction et lier les différentes interventions utilisateur à cette action.
Voici un exemple où un geste vers la droite va effacer le contenu de la boîte d'édition qui a actuellement la focalisation clavier :
Notez
- si notre Memo1 d'affichage est le contrôle actif, il est aussi effacé (c'est un descendant de tCustomEdit !)
- si nous essayons d'afficher le type de geste dans Form1.OnGesture, rien
n'est affiché: Action1 a pris le pas sur OnGesture
2.3 - Utilisation d'une action standard Créons un geste "flèche vers le haut" pour couper le texte de l'edit actif dans le presse papier
| sélectionnez Form1.Touch.GesturesStandard.ChevronUp, ouvrez la combo box, sélectionnez "Standard Action" puis "Edit" et "tEditCut"
| | la nouvelle action "Copy" est créée:
| |
compilez, exécutez, sélectionnez quelques caractères de Edit2, faites un "circonflexe" sur la forme et vérifiez en copiant dans Memo1 que la partie sélectionnée a bien été copiée dans le presse papier |
Notez que
- comme pour toutes les actions standard, la mécanique des actions se charge d'effectuer le traitement (nous n'avons pas à appeler "CopyToClipBoard": l'action standard s'en charge)
- les actions ne sont pas attachée au tEdit mais au geste, ainsi que le montre le .DFM
Object Edit1: TEdit Left = 16
Top = 8 Width = 121 Height = 21
TabOrder = 1 Text = 'Edit1' End
Object Edit2: TEdit Left = 16
Top = 40 Width = 121 Height = 21
TabOrder = 2 Text = 'Edit2' End
Object Edit3: TEdit Left = 16
Top = 72 Width = 121 Height = 21
TabOrder = 3 Text = 'Edit3' End
Object GestureManager1: TGestureManager Left = 200
Top = 32 GestureData = < item
Control = Owner Collection = <
item
Action = Action1
GestureID = sgiRight
End item
Action = EditCopy1
GestureID = sgiChevronUp
End> End> End
Object ActionList1: TActionList Left = 288
Top = 32 Object Action1: TAction
Caption = 'Action1'
OnExecute = Action1Execute End
Object EditCopy1: TEditCopy
Caption = '&Copy'
Hint = 'Copy|Copies the selection and puts it on the Clipboard'
ImageIndex = 1 ShortCut = 16451
End |
3 - Télécharger le code source Delphi Vous pouvez télécharger:
Ce .ZIP qui comprend: - le .DPR, la forme principale, les formes annexes eventuelles
- les fichiers de paramètres (le schéma et le batch de création)
- dans chaque .ZIP, toutes les librairies nécessaires à chaque projet (chaque
.ZIP est autonome)
Ces .ZIP, pour les projets en Delphi 6, contiennent des chemins RELATIFS. Par conséquent: - créez un répertoire n'importe où sur votre machine
- placez le .ZIP dans ce répertoire
- dézippez et les sous-répertoires nécessaires seront créés
- compilez et exécutez
Ces .ZIP ne modifient pas votre PC (pas de changement de la Base de Registre, de DLL ou autre). Pour supprimer le projet, effacez le répertoire.
La notation utilisée est la notation alsacienne qui consiste à préfixer les identificateurs par la zone de compilation: K_onstant, T_ype, G_lobal,
L_ocal, P_arametre, F_unction, C_lasse. Elle est présentée plus en détail dans l'article La
Notation Alsacienne
Comme d'habitude: - nous vous remercions de nous signaler toute erreur, inexactitude ou
problème de téléchargement en envoyant un e-mail à jcolibri@jcolibri.com. Les corrections qui en résulteront pourront aider les prochains lecteurs
- tous vos commentaires, remarques, questions, critiques, suggestion d'article, ou mentions d'autres sources sur le même sujet seront de même les bienvenus à jcolibri@jcolibri.com.
- plus simplement, vous pouvez taper (anonymement ou en fournissant votre e-mail pour une réponse) vos commentaires ci-dessus et nous les envoyer en cliquant "envoyer" :
- et si vous avez apprécié cet article, faites connaître notre site, ajoutez un lien dans vos listes de liens ou citez-nous dans vos
blogs ou réponses sur les messageries. C'est très simple: plus nous aurons de visiteurs et de références Google, plus nous écrirons d'articles.
4 - Références Vous pouvez aussi consulter, dans le même domaine:
- Ecrans Tactiles Delphi
John Colibri - mars 2013 - gestion Delphi des écrans tactiles multi-points: type d'écrans, test,
messages souris, déplacement d'objets, message wm_touch, moteur d'inertie Windows
5 - L'auteur John COLIBRI est passionné par le développement
Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le
conseil (composants, architecture, test) et la
formation. Son site contient des articles
avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et
UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client. |