menu
  Home  ==>  articles  ==>  vcl_rtl  ==>  gestes_delphi   

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
   créez une nouvelle application VCL
   posez un tGestureManger sur la forme
   posez un tPanel
   voici la situation avec, dans l'Inspecteur d'Objet la propriété Touch:

gesture_manager

et

  • l'Inspecteur d'Objet nous invite à initialiser Panel1.Touch.GestureManager
  • la propriété Gestures est vide

   initialisez GestureManager à GestureManager1 (en utilisant la combo box ou par double click sur la valeur de la propriété)

   à présent
  • Gestures comporte à présent une sous propriété qui permet de sélectionner toute une série de gestes standards (mouvement gauche, droit etc)

    assign_gesturemanager

  • Gestures a une ellipse ... permettant de mieux visualiser les gestes proposés dans un dialogue particulier, Gestion Collection Editor

    gesture_collection_editor

    cet éditeur présente chaque geste, avec un petit graphique, et un identificateur que nous pourrons utiliser dans OnGesture

   pour visualiser le geste, cliquez sur l'un des gestes le Gestion collection Editor. Par exemple triangle

   le diagramme au bas de l'éditeur présente une animation:

gesture_animation

   double cliquez l'un des gestes

   la prévisualisation agrandie est affichée dans une dialogue

gesture_animation_preview



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
               GestureIDTGestureID;
               LocationTPoint;
               FlagsTInteractiveGestureFlags;
               AngleDouble;
               InertiaVectorTSmallPoint;
               Case Integer Of
                 0: (DistanceInteger);
                 1: (TapLocationTSmallPoint);
             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

Uses Vcl.Touch.Gestures;

   créez l'événement Panel1.OnGesture, et affichez les informations sur le geste. Par exemple:

Procedure TForm1.Panel1Gesture(SenderTObject;
    Const EventInfoTGestureEventInfoVar HandledBoolean);
  Var l_gesture_nameString;
  Begin
    display('ongesture');

    With EventInfo Do
    Begin
      GestureToIdent(GestureIDl_gesture_name);
      display(Format('  %d %s', [GestureIDl_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:

ongesture




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 :
   créez une nouvelle application Delphi VCL
   posez 3 tEdit sur la forme
   posez un tGestureManager et un tActionList sur la forme
   sélectionnez Form1.Touch et initialisez Form1.Touch.GestureManager vers GestureManager1
   créez une action liée au geste vers la droite en sélectionnant Form1.Touch.Gestures.Standard.Right en déroulant la combo box

   nous pouvons créer une nouvelle action ou sélectionner une action standard

create_new_gesture_action

   sélectionnez "New Action"

   une nouvelle action a été créée

ew_gesture_action_created

   sélectionnez cette action (dans le Structure Pane ou en ouvrant le gestionnaire d'action par double clic sur ActionList1)

   l'objet action est affiché

select_new_gesture_action

   créez l'événement Action1.OnExecute par double clic sur OnExecute (ou double clic sur Action1 dans le Structure Pane ou l'éditeur d'actions)

   dans cet événement, effacez le texte de l'edit actif

Procedure TForm1.Action1Execute(SenderTObject);
  Begin
    display('action_execute 'Sender.ClassName);
    If (ActiveControl Is TCustomEdit)
      Then Begin
          TCustomEdit(ActiveControl).Clear;
          display('  clear active edit');
        End;
  End// Action1Execute

   compilez, puis
  • sélectionnez Edit2 et faites un geste vers la droite
   le texte de Edit2 est supprimé

clear_edit_gesture



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"

gesture_stanard_action_edit

   la nouvelle action "Copy" est créée:

gesture_stanard_action_edit_copy

   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 Edit1TEdit
        Left = 16
        Top = 8
        Width = 121
        Height = 21
        TabOrder = 1
        Text = 'Edit1'
      End
      Object Edit2TEdit
        Left = 16
        Top = 40
        Width = 121
        Height = 21
        TabOrder = 2
        Text = 'Edit2'
      End
      Object Edit3TEdit
        Left = 16
        Top = 72
        Width = 121
        Height = 21
        TabOrder = 3
        Text = 'Edit3'
      End
      Object GestureManager1TGestureManager
        Left = 200
        Top = 32
        GestureData = <
          item
            Control = Owner
            Collection = <
              item
                Action = Action1
                GestureID = sgiRight
              End
              item
                Action = EditCopy1
                GestureID = sgiChevronUp
              End>
          End>
      End
      Object ActionList1TActionList
        Left = 288
        Top = 32
        Object Action1TAction
          Caption = 'Action1'
          OnExecute = Action1Execute
        End
        Object EditCopy1TEditCopy
          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" :
    Nom :
    E-mail :
    Commentaires * :
     

  • 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.
Created: jan-04. Last updated: mar-2020 - 250 articles, 620 .ZIP sources, 3303 figures
Contact : John COLIBRI - Tel: 01.42.83.69.36 / 06.87.88.23.91 - email:jcolibri@jcolibri.com
Copyright © J.Colibri   http://www.jcolibri.com - 2001 - 2020
Retour:  Home  Articles  Formations  Développement Delphi  Livres  Pascalissime  Liens  Download
l'Institut Pascal

John COLIBRI

+ Home
  + articles_avec_sources
    + bases_de_donnees
    + web_internet_sockets
    + services_web_
    + prog_objet_composants
    + office_com_automation
    + colibri_utilities
    + uml_design_patterns
    + graphique
    + delphi
    + outils
    + firemonkey
    + vcl_rtl
      – gestes_delphi
      – delphi_vcl_styles
      – anonymous_methods
      – ecran_tactile_delphi
    + colibri_helpers
    + colibri_skelettons
    + admin
  + formations
  + developpement_delphi
  + présentations
  + pascalissime
  + livres
  + entre_nous
  – télécharger

contacts
plan_du_site
– chercher :

RSS feed  
Blog

Prestataire Delphi réalisation de projets Delphi, création de composants, migration Delphi - Tél 01.42.83.69.36