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

WinDev Discussion :

PC Windows hybride (Surface) - Clavier virtuelle numérique


Sujet :

WinDev

  1. #1
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut PC Windows hybride (Surface) - Clavier virtuelle numérique
    Bonjour,

    Je dois faire face à un petit problème sur l'une de mes applications déjà déployée chez un client. Celui-ci veut remplacer les ordinateurs portables de la société par des PC hybrides Windows afin de jongler entre fonctionnement tablette et fonctionnement "bureau". Jusque là pas de problème particulier car windows s'occupe de gérer le switch de mode. En mode tablette, lors de l'entrée dans un champ de saisie, le clavier virtuel s'ouvre pour permettre la saisie. Et c'est là que commence les problèmes :

    - Les fonctions DonneFocus() et RepriseSaisie() de Windev donne bien le focus sur le champ de saisie mais n'ouvre pas le clavier virtuel,
    - Les champs de saisies de type "numérique uniquement" ouvre le clavier virtuel mais en mode alphabet (c'est à l'utilisateur de switcher vers le clavier numérique...)

    Donc est-ce que quelqu'un pourrait me dire comment :
    1. Ouvrir et fermer par programmation le clavier virtuel Windows
    2. Choisir le mode de clavier à l'ouverture pour que celui-ci s'ouvre en mode "alphabétique"

    Quand je parle de clavier "alphabétique", je parle de ce type de clavier virtuel :
    Nom : Surface-Pro-virtual-keyboard-600x337.png
Affichages : 1462
Taille : 113,3 Ko

    Quand on appuie sur la touche "&123" en bas a gauche du clavier virtuel, on passe à la saisie des nombres :
    Nom : 0083.Number-and-symbol-view_5E8F30E6.png
Affichages : 1498
Taille : 97,6 Ko

    Merci d'avance.


    EDIT : Si quelqu'un possède Windev 24 peut-il m'envoyer une petite application contenant simplement une fenetre avec un champ de saisie type numérique pour que je puisse tester de mon coté svp ? Peut-être que PcSoft à évoluer le champ depuis (je suis en 21).
    Google est ton ami !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Léon

    Et un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // -- Traitement d'entrée en saisie d'un champ
    // Récupérer la liste des types de claviers disponibles
    TypeClavier est une chaîne
    TypeClavier = ClavierListe()
    SI Position(TypeClavier, "Numérique") <> 0 ALORS
    // Sélectionnez le clavier "Transcriber"
    ClavierMode("Numérique")
    // Activer le clavier sélectionné
    ClavierVisible(Vrai)
    FIN
    A+

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Si la piste de BrunoM45 marche (et il n'y a pas de raison qu'elle ne marche pas), tu peux surcharger la fonction DonneFocus().
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Les fonctions ClavierVisible(), ClavierListe(), etc... ne sont pas disponibles pour un développement Windev sur Windows... Et c'est bien là tout le problème car les pc hybrides fonctionnent sur un Windows 10 classique avec un mode tablette !

    Le passage en configuration Windows APP n'est pas envisageable au vue de toutes les fonctions non compatibles utilisés actuellement dans le projet.
    Google est ton ami !

  5. #5
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    En parcourant le MSDN je suis tombé sur cette page : https://msdn.microsoft.com/fr-fr/lib.../mt280229.aspx

    Il est indiqué qu'il faut ajouter une propriété au champs de saisie pour définir le format attendu : InputScope ! Dans le cas d'une saisie chiffrée il faut indiquer Number.

    Ils donnent des exemples pour le web et pour du C# mais comment utiliser cela avec Windev ??
    Google est ton ami !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Léon,

    Trouvé sur le net, essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LanceAppliAssociée("C:\Windows\System32\osk.exe")
    A+

  7. #7
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Merci Bruno mais cela ouvre un autre clavier virtuel de Windows... Pas celui géré par Windows directement...
    Google est ton ami !

  8. #8
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Petit up avec un complément d'information.

    Après avoir recherché sur internet je me suis rendu compte qu'il s'agit du clavier géré par TabTip.exe et non osk.exe.

    J'ai également vu qu'il était possible de le piloter un peu par de PostMessage. Voici un exemple en C# :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void HideOnScreenKeyboard()
    {
        uint WM_SYSCOMMAND = 274;
        uint SC_CLOSE = 61536;
        IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
        PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
    }
    Google est ton ami !

  9. #9
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut RELANCE
    Bonjour,

    Après quelques échanges avec PcSoft. Ceux-ci m'ont indiqué qu'il était possible de faire ce que je souhaite en utilisant l'api windows et la fonction SetInputScope() (https://docs.microsoft.com/en-us/win...-setinputscope)

    Par contre je n'arrive pas du tout à l'utiliser... Je vois que la fonction a 2 paramètres ! Le premier est un handle (apparemment de la fenêtre) et le deuxième est un objet de type énumération (https://docs.microsoft.com/en-us/win...ope-inputscope).

    Voici ce que j'ai fait :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    // Code d'initialisation de mon projet 
    InputScope est une Enumération
    	IS_DEFAULT
    	IS_URL
    	IS_FILE_FULLFILEPATH
    	IS_FILE_FILENAME
    	IS_EMAIL_USERNAME
    	IS_EMAIL_SMTPEMAILADDRESS
    	IS_LOGINNAME
    	IS_PERSONALNAME_FULLNAME
    	IS_PERSONALNAME_PREFIX
    	IS_PERSONALNAME_GIVENNAME
    	IS_PERSONALNAME_MIDDLENAME
    	IS_PERSONALNAME_SURNAME
    	IS_PERSONALNAME_SUFFIX
    	IS_ADDRESS_FULLPOSTALADDRESS
    	IS_ADDRESS_POSTALCODE
    	IS_ADDRESS_STREET
    	IS_ADDRESS_STATEORPROVINCE
    	IS_ADDRESS_CITY
    	IS_ADDRESS_COUNTRYNAME
    	IS_ADDRESS_COUNTRYSHORTNAME
    	IS_CURRENCY_AMOUNTANDSYMBOL
    	IS_CURRENCY_AMOUNT
    	IS_DATE_FULLDATE
    	IS_DATE_MONTH
    	IS_DATE_DAY
    	IS_DATE_YEAR
    	IS_DATE_MONTHNAME
    	IS_DATE_DAYNAME
    	IS_DIGITS
    	IS_NUMBER
    	IS_ONECHAR
    	IS_PASSWORD
    	IS_TELEPHONE_FULLTELEPHONENUMBER
    	IS_TELEPHONE_COUNTRYCODE
    	IS_TELEPHONE_AREACODE
    	IS_TELEPHONE_LOCALNUMBER
    	IS_TIME_FULLTIME
    	IS_TIME_HOUR
    	IS_TIME_MINORSEC
    	IS_NUMBER_FULLWIDTH
    	IS_ALPHANUMERIC_HALFWIDTH
    	IS_ALPHANUMERIC_FULLWIDTH
    	IS_CURRENCY_CHINESE
    	IS_BOPOMOFO
    	IS_HIRAGANA
    	IS_KATAKANA_HALFWIDTH
    	IS_KATAKANA_FULLWIDTH
    	IS_HANJA
    	IS_HANGUL_HALFWIDTH
    	IS_HANGUL_FULLWIDTH
    	IS_SEARCH
    	IS_FORMULA
    	IS_SEARCH_INCREMENTAL
    	IS_CHINESE_HALFWIDTH
    	IS_CHINESE_FULLWIDTH
    	IS_NATIVE_SCRIPT
    	IS_YOMI
    	IS_TEXT
    	IS_CHAT
    	IS_NAME_OR_PHONENUMBER
    	IS_EMAILNAME_OR_ADDRESS
    	IS_PRIVATE
    	IS_MAPS
    	IS_NUMERIC_PASSWORD
    	IS_NUMERIC_PIN
    	IS_ALPHANUMERIC_PIN
    	IS_ALPHANUMERIC_PIN_SET
    	IS_FORMULA_NUMBER
    	IS_CHAT_WITHOUT_EMOJI
    	IS_PHRASELIST
    	IS_REGULAREXPRESSION
    	IS_SRGS
    	IS_XML
    	IS_ENUMSTRING
    FIN
    Et dans ma fenetre de saisie, certains champs sont de type numérique et d'autre de type texte. Actuellement le clavier tactile s'ouvre toujours en mode saisie texte (pas le clavier numérique). J'ai donc pensé à mettre le code suivant dans le code d'entrée de mon champs de saisie numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    hwnd est un entier système = Handle(MaFenêtre)
     
    AppelDLL32("Msctf","SetInputScope",hwnd,"IS_NUMBER")
    A l’exécution je n'ai pas d'erreur mais le clavier s'ouvre toujours en mode texte...

    J'ai essayer de déplacer le code à l'initialisation de ma fenêtre pour un test. Toujours pareil...

    Je n'ai pas pu utiliser l'énumération que j'ai déclaré car à chaque fois que je fais l'appel j'ai une exception : "Le paramètre n°4 n'est pas d'un type valide pour AppelDLL().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    hwnd est un entier système = Handle(MaFenêtre)
    oInputScope est un InputScope = IS_NUMBER
    AppelDLL32("Msctf","SetInputScope",hwnd,oInputScope)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hwnd est un entier système = Handle(MaFenêtre)
    AppelDLL32("Msctf","SetInputScope",hwnd,InputScope.IS_NUMBER)
    J'ai également essayé tout ca en passant le handle de mon champ et non de ma fenêtre mais c'est le même résultat...

    Avez-vous une idée svp ?
    Google est ton ami !

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour LeonCosnyd,

    pour moi, ton énumération ne sert à rien. Il te faut valoriser tous les IS_XXX. Je ne pense pas qu'il prenne la valeur de chaîne (ni le pointeur sur cette chaîne). Il faut juste que tu aies 2 constantes : Une pour le clavier texte, une pour le clavier numérique.

    EDIT : qui semble corroborer mon idée : apparemment, il faut que tu mettes 29 pour IS_NUMBER
    Regarde ici : http://www.dotnetframework.org/defau.../InputScope@cs
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  11. #11
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Bonjour. Merci pour ces informations.

    Je suis parti donc sur 2 constantes déclarées dans le code d'initialisation de mon projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CONSTANTE
    IS_DEFAULT=0
    IS_NUMBER=29
    FIN
    Dans le code d'entrée en saisie de mon champs de saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    API("msctf.dll","SetInputScope",Handle(MaFenêtre),IS_NUMBER)
    En effectuant ce test je n'ai pas d'erreur ou d'exception. mais le clavier s'ouvre toujours en mode texte et non en mode numérique....
    Google est ton ami !

  12. #12
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Désolé pour toi, mais comme bien souvent avec les API Windows, ce n'est jamais simple. J'ai trouvé un exemple VB : https://www.experts-exchange.com/que...putScopes.html.

    Ce que je vois, c'est que non seulement il y a SetInputScope mais aussi SetInputScopes...

    Une autre discussion sur Delphi : https://forums.embarcadero.com/messa...ssageID=802443
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  13. #13
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    ENFIN !!!!!!!! Je viens de réussir à ouvrir le clavier tactile en mode numérique !!!!

    Il fallait bien passer par des constantes ! Mais c'est l'appel à l'api qui n'était pas bon. En fait il faut indiquer le handle du champ et non le handle de la fenêtre comme indiqué dans la doc microsoft...

    Du coup pour ouvrir le clavier dans un mode différent il faut faire cet appel dans le code d'initialisation du champ de saisie (ou à l'initialisation de la fenêtre selon les préférences) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    API("msctf.dll","SetInputScope",Handle(MONCHAMP),IS_DIGITS)
    Voilà je peux enfin passer le sujet en résolu après des mois de recherche... C'était assez simple au final.
    Google est ton ami !

  14. #14
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Super mon bon Léon,

    Bon ben, finalement, pour une fois, ce n'est pas compliqué.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

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

Discussions similaires

  1. Réutilisation du clavier virtuel de Windows sous Qt4
    Par kuro00 dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 19/04/2010, 14h46
  2. positionner clavier virtuel windows
    Par winnyzeboss1 dans le forum MFC
    Réponses: 1
    Dernier message: 02/04/2009, 06h31
  3. Soucis clavier virtuel windows + appli plein ecran
    Par winnyzeboss1 dans le forum MFC
    Réponses: 4
    Dernier message: 01/04/2009, 10h21
  4. Clavier Virtuel Windows CE 5.0
    Par johspi dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 17/09/2008, 09h13
  5. Réponses: 3
    Dernier message: 24/02/2008, 15h57

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