PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → API Windows - SetInputScope()
API Windows - SetInputScope()
Iniciado por LeonCosnyd, 30,ene. 2020 11:14 - 2 respuestas
Miembro registrado
51 mensajes
Publicado el 30,enero 2020 - 11:14
Bonjour,

J'ai besoin de faire appel à l'API windows pour gérer le type de clavier tactile qui s'ouvre sur une tablette windows (surface). Quand un champ de saisie windev est de type numérique actuellement le clavier tactile (tabtip.exe) de windows s'ouvre en saisie texte et non en saisie numérique.

Après avoir un peu échanger avec PcSoft ils m'ont indiqué que cela était possible en utilisant l'api windows et la fonction SetInputScope() : https://docs.microsoft.com/en-us/windows/win32/api/inputscope/nf-inputscope-setinputscope

Cependant j'ai du mal à l'utiliser... Pouvez-vous m'aider svp ?

Comment transformer l'énumération windows InputScope pour l'utiliser dans windev ?

API("msctf.dll","SetInputScope",Handle(MaFenêtre),"IS_NUMBER")

En essayant de passer par une chaine et non par l'objet "InputScope" je n'ai pas d'exception mais le clavier ne s'ouvre toujours pas en mode numérique...

Et quand j'essaie d'implémenter l'énumération InputScope ce provoque une exception (paramètre non valide)
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

oInputscope est un InputScope = IS_DIGITS
API("msctf.dll","SetInputScope",Handle(MaFenêtre),oInputscope)


==> Exception : Le paramètre n°4 n'est pas d'un type valide pour AppelDLL().
Miembro registrado
324 mensajes
Publicado el 30,enero 2020 - 12:51
Après quelques test, la ca ne fait pas d'erreur, l'api ,me renvoi 0 en résultat, donc ca doit fonctionner

"An HRESULT is an opaque result handle defined to be zero or positive for a successful return from a function, and negative for a failure. Generally, successful functions return the S_OK HRESULT value (which is equal to zero)."

API("Msctf","SetInputScope",Handle(MaFenêtre),"IS_DIGITS")

Par contre ca ne met quand même pas uniquement des chiffres à la saisie
Mensaje modificado, 30,enero 2020 - 13:01
Miembro registrado
51 mensajes
Publicado el 30,enero 2020 - 14:13
Je viens de solutionner mon problème !

Pour importer l'énumération InputScope, j'utilise des constantes et non une énumération Windev. Et en parcourant le net j'ai vu qu'il fallait affecter un numéro comme ceci :

CONSTANTE
IS_DEFAULT=0
IS_URL=1
IS_FILE_FULLFILEPATH=2
IS_FILE_FILENAME=3
IS_EMAIL_USERNAME=4
IS_EMAIL_SMTPEMAILADDRESS=5
IS_LOGINNAME=6
IS_PERSONALNAME_FULLNAME=7
IS_PERSONALNAME_PREFIX=8
IS_PERSONALNAME_GIVENNAME=9
IS_PERSONALNAME_MIDDLENAME=10
IS_PERSONALNAME_SURNAME=11
IS_PERSONALNAME_SUFFIX=12
IS_ADDRESS_FULLPOSTALADDRESS=13
IS_ADDRESS_POSTALCODE=14
IS_ADDRESS_STREET=15
IS_ADDRESS_STATEORPROVINCE=16
IS_ADDRESS_CITY=17
IS_ADDRESS_COUNTRYNAME=18
IS_ADDRESS_COUNTRYSHORTNAME=19
IS_CURRENCY_AMOUNTANDSYMBOL=20
IS_CURRENCY_AMOUNT=21
IS_DATE_FULLDATE=22
IS_DATE_MONTH=23
IS_DATE_DAY=24
IS_DATE_YEAR=25
IS_DATE_MONTHNAME=26
IS_DATE_DAYNAME=27
IS_DIGITS=28
IS_NUMBER=29
IS_ONECHAR=30
IS_PASSWORD=31
IS_TELEPHONE_FULLTELEPHONENUMBER=32
IS_TELEPHONE_COUNTRYCODE=33
IS_TELEPHONE_AREACODE=34
IS_TELEPHONE_LOCALNUMBER=35
IS_TIME_FULLTIME=36
IS_TIME_HOUR=37
IS_TIME_MINORSEC=38
IS_NUMBER_FULLWIDTH=39
IS_ALPHANUMERIC_HALFWIDTH=40
IS_ALPHANUMERIC_FULLWIDTH=41
IS_CURRENCY_CHINESE=42
IS_BOPOMOFO=43
IS_HIRAGANA=44
IS_KATAKANA_HALFWIDTH=45
IS_KATAKANA_FULLWIDTH=46
IS_HANJA=47
IS_HANGUL_HALFWIDTH=48
IS_HANGUL_FULLWIDTH=49
IS_SEARCH=50
IS_FORMULA=51
IS_SEARCH_INCREMENTAL=52
IS_CHINESE_HALFWIDTH=53
IS_CHINESE_FULLWIDTH=54
IS_NATIVE_SCRIPT=55
IS_YOMI=56
IS_TEXT=57
IS_CHAT=58
IS_NAME_OR_PHONENUMBER=59
IS_EMAILNAME_OR_ADDRESS=60
IS_PRIVATE=61
IS_MAPS=62
IS_NUMERIC_PASSWORD=63
IS_NUMERIC_PIN=64
IS_ALPHANUMERIC_PIN=65
IS_ALPHANUMERIC_PIN_SET=66
IS_FORMULA_NUMBER=67
IS_CHAT_WITHOUT_EMOJI=68
IS_PHRASELIST=69
IS_REGULAREXPRESSION=70
IS_SRGS=71
IS_XML=72
IS_ENUMSTRING=73
FIN


Et pour l'appel à la fonction il ne faut pas utiliser le handle de la fenêtre mais bien le handle du champ ! Ca me parait plus simple et plus logique.

Du coup pour les champs de saisie Windev de type numérique, je mets ce code dans le code d'initialisation du champ :

API("msctf.dll","SetInputScope",Handle(MONCHAMP),IS_DIGITS)


Avec cela tout fonctionne bien ! Reste à définir le type de saisie attendu avec les constantes IS_NUMBER, IS_DIGITS, etc....