IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

MultiTouch WinForm VB


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 49
    Par défaut MultiTouch WinForm VB
    Bonjour,

    Personne a réussi à faire du multitouch en vb.net ?
    Pour le moment j'arrive à détecter que je suis en train de faire un Zoom ou une Rotation avec deux doigts mais je n'arrive pas a avoir les coordonnées des deux doigts en même temps...
    C'est le dernier qui bouge qui donne les points !

    Merci à vous.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut
    Bonjour,

    J'ai aussi développé un programme en VB et winform principalement destiné à une tablette sous windows (mais aussi sur un PC avec écran non tactile).
    J'ai rencontré le même manque de doc (surtout en vb !).
    Comme j'avais principalement besoin de la gestion des gestes (Pans, Zooms, pressAndTap etc..) j'ai laissé tomber les messages obtenus après WM_TOUCH pour me concentrer sur ceux de WM_GESTURE.
    Il est impossible d'avoir les deux types de message en même temps.

    Une petite astuce avec WM_PARENTNOTIFY (qui fonctionne en même temps que WM_GESTURE) m'a permit de connaître le nombre de doigts touchant la tablette ce qui me permet d'affiner l'usage de messages comme GID_TWOFINGERTAP qui, contrairement à son nom, fonctionne indifféremment avec une frappe de deux, trois, quatre..... doigts.

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Tu peux voir ce lien github:
    https://github.com/rprouse/WinTouch.NET

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 49
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    bonjour

    Tu peux voir ce lien github:
    https://github.com/rprouse/WinTouch.NET
    Malheureusement cela fonctionne que en C#

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 49
    Par défaut
    Citation Envoyé par baloub Voir le message
    Bon, en fait je faisais une erreur d'interprétation.
    Je ne sais pas pourquoi mais je pensais que WM_POINTERDOWN fonctionnait comme GID_ZOOM et renvoyait les coordonnées d'un point milieu.

    En fait non, on reçoit autant de messages WM_POINTERDOWN que de contacts de doigts :
    - un doigt -> un message avec coordonnées
    - deux doigts -> deux messages avec coordonnées de chaque point
    - trois doigts -> trois messages etc..

    Du coup il suffit de stocker les coordonnées reçues dans une liste, puis lors d'un mouse move suivant (ou un GID_PAN) de compter le nombre de points dans la liste et d'appliquer la bonne action.
    Je suis tombé sur ce message, tu as donc pu y faire marcher ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut
    Bonjour,

    C'est "l'astuce" dont je parlais.
    Je voulais connaître le nombre de points de contact ainsi que les coordonnées dans le cas d'un contact unique.
    Si tu as besoin de connaître l'évolution du multi touch dans le temps c'est vers WM_TOUCH qu'il faut t'orienter.
    Ci-dessous le principe de la routine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
        <PermissionSet(SecurityAction.Demand, Name:="FullTrust")>
        Protected Overrides Sub WndProc(ByRef m As Message)
           Try
                Select Case m.Msg
     
                    Case WM_DISPLAYCHANGE ' traitement suivant un changement de dimensions d'écran (ou rotation)
                        Dim WEcran As Integer = m.LParam.ToInt64 And &HFFFF
                        Dim HEcran As Integer = (m.LParam.ToInt64 >> 16) And &HFFFF
                        traite_orientation(WEcran, HEcran)
                        handled = True
     
                    Case WM_GESTURE  ' traitement des messages gestuels (zoom, pan...)
                        handled = DecodeGesture(m)
                        Exit Select
     
                    Case WM_PARENTNOTIFY
                        Dim vwparam As Integer = m.WParam.ToInt32 And &HFFFF
                        If vwparam = WM_POINTERDOWN Then
                            tactile = True '
                            Dim xp As Integer = (m.LParam.ToInt32) And &HFFFF
                            Dim yp As Integer = (m.LParam.ToInt32) >> 16
                            Dim obj As Control = FromHandle(WindowFromPoint(New Point(xp, yp))) ' détermine le control qui a été touché
                            PiBoxTouche = obj.Name 
                            Dim coor As Point = obj.PointToClient(New Point(xp, yp)) 'coordonnées du point en valeurs client
     
                            '
                            '
                            ' ici tout un tas de select case en fonction de l'objet touché
                            '
                            '
     
     
                            memoTouch.Add(coor) 'mémo des coordonnées du point touché par un doigt
                            nbDoigts = memoTouch.Count ' mémo du nombre de doigts 
     
                            ' Le timer est de 50ms suffisant pour comptabiliser le nb de doigts avant de vider la liste
     
                            If Timer_MultiDoigts.Enabled = False Then 
                                Timer_MultiDoigts.Start()
                            End If
     
                         End if
                 End Select
             MyBase.WndProc(m)
        End Sub
     
        Private Sub Timer_MultiDoigts_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer_MultiDoigts.Tick
            Timer_MultiDoigts.Stop()
            memoTouch.Clear()
        End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 49
    Par défaut
    Citation Envoyé par baloub Voir le message
    Bonjour,

    J'ai aussi développé un programme en VB et winform principalement destiné à une tablette sous windows (mais aussi sur un PC avec écran non tactile).
    J'ai rencontré le même manque de doc (surtout en vb !).
    Comme j'avais principalement besoin de la gestion des gestes (Pans, Zooms, pressAndTap etc..) j'ai laissé tomber les messages obtenus après WM_TOUCH pour me concentrer sur ceux de WM_GESTURE.
    Il est impossible d'avoir les deux types de message en même temps.

    Une petite astuce avec WM_PARENTNOTIFY (qui fonctionne en même temps que WM_GESTURE) m'a permit de connaître le nombre de doigts touchant la tablette ce qui me permet d'affiner l'usage de messages comme GID_TWOFINGERTAP qui, contrairement à son nom, fonctionne indifféremment avec une frappe de deux, trois, quatre..... doigts.
    Idem, je bloque juste sur les coordonnées des deux doigts en même temps ! Franchement si prêt du but je suis vraiment dégoûté

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Winforms / Windows 8 - Problème d’interaction MultiTouch
    Par Sometimes dans le forum Développement Windows
    Réponses: 0
    Dernier message: 11/12/2013, 16h12
  2. [VS.NET] [WinForms] [VB.NET] Créer un installeur
    Par Fruity dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/05/2008, 16h50
  3. [C#] [WinForms] Ascenceur du DataGrid !!!
    Par vandeyy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 21/09/2004, 17h15
  4. [VB.NET] [WinForms] Emdebed Ressource !
    Par maitrebn dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/07/2004, 12h46
  5. [VB.NET] [Winform] DataGrid Excel et CheckBox
    Par mic56 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/06/2004, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo