Pour gérer l'appui long depuis une application, quand on pose un composant, il suffit d'utiliser l'évènement OnGesture et de tester :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if EventInfo.GestureID = igiLongTap then
Mais dans un composant, comment faire ?
- J'ai essayé de surcharger DoGesture, vu que dans les sources de la classe TControl, il y a écrit :// Override DoGesture to implement default behaviorJ'ai vu que l'aide précise de ne pas utiliser l'évènement OnGesture dans ce cas :Mais, cette procédure n'est pas appelée (j'ai mis un point d'arrêt).Traite les événements de mouvement non gérés.
DoGesture est exécutée automatiquement pour tous les événements de mouvements qui n'étaient pas gérés par l'utilisateur. DoGesture est exécutée seulement si OnGesture n'est pas défini, ou s'il ne gérait pas l'événement de mouvement.
Redéfinissez DoGesture dans les classes descendantes pour supporter le comportement par défaut des événements de mouvement qui n'étaient pas gérés par l'utilisateur. Dans TControl, le retour de la méthode DoGesture est simplement effectué, sans aucun traitement spécial.
- J'ai tenté d'utiliser l'évènement à la place :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 procedure BtnGesture(Sender: TObject; const [Ref] EventInfo: TGestureEventInfo; var Handled: Boolean); ... OnGesture := BtnGesture;Mais, la procédure BtnGesture n'est pas appelée (j'ai mis un point d'arrêt).
- Je me doutais que ça ne pouvait pas marcher, mais j'ai testé la capture de l'évènement WM_TOUCH : évidement, ça ne marche qu'en VCL.
- Vu que les TForm héritent de l'interface IMultiTouch, j'ai tenté d'en hériter aussi, mais la procédure MultiTouch n'est pas appelée (j'ai mis un point d'arrêt).
Comment capturer le fait qu'il y ait un appui long à l'intérieur de mon composant ?
Sinon, ils ont de l'humour chez embarcadero : http://docwiki.embarcadero.com/Libra...activeGestures
Voir la définition de DoubleTap
Partager