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 :

clavier virtuel multilangue [WD15]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut clavier virtuel multilangue
    Bonjour,
    j'essaie de mettre en place un clavier virtuel multilangue.
    Hors j'ai un problème avec la langue allemande que je trouve très jolie d'ailleurs, mais la n'est pas le problème.
    En effet lorsque j'essaie de taper un "ß" et bien cela ne fonctionne pas.
    J'utilise les api windows en windev. Je vous colle une partie du code qui normalement est censée appuyer sur la bonne touche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    API("user32", "keybd_event",  Asc("ß"), 0, 0, 0)
    Avez vous une idée ?
    merci

    Edit: je remarque que le caractères que j'essaie de saisir ne correspond à aucune touches ascii. Du coup je change ma question
    Comment réussir à envoyer cette touche "ß".

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    En cherchant j'ai trouvé une solution avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    envoietouche("ß",HandleDeLaFentre)
    de windev par contre si j'appuie 5 fois de suite la lettre n'appraitra que 2 fois.
    Juste avant de faire envoietouche je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SysFenAffiche(HandleDeLaFentre);
    SysDonneFocus(HandleDeLaFentre);
    Quelqu'un a t il une idée ?
    Personne n'a essayer de faire un clavier virtuel en windev ?
    J'ai vraiment l'impression que la fonction de windev rame quand il s'agit d'utiliser une fenetre externe à windev.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Citation Envoyé par kayobil Voir le message
    Personne n'a essayer de faire un clavier virtuel en windev ?
    WinDev n'est vraiment pas conçu pour ce genre de développement.

  4. #4
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    Le problème quand vous rendez la fenêtre cible active avant chaque touche, c'est que vous allez provoquer l'exécution d'un code gérant cette prise de focus.
    Exemple : Essayez votre clavier sur la barre d'adresse d'un navigateur web. A chaque envoi de touche le champ sera vidé.

    Pour résoudre ça, il faut changer le style de votre fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CONSTANT
    	GWL_EXSTYLE			= -20
    	WS_EX_NOACTIVATE	= 0x08000000
    FIN
     
    API("user32.dll", "SetWindowLongA", Handle(MaFenêtre), GWL_EXSTYLE, API("user32.dll", "GetWindowLongA", Handle(MaFenêtre), GWL_EXSTYLE) | WS_EX_NOACTIVATE)
    Ensuite, si vous trouvez que EnvoiTouche ne marche pas comme vous le voudriez, voici comment envoyer une touche d'après un caractère unicode avec les fonctions Windows :

    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
    CONSTANT
    	VK_PACKET			= 0xE7
    	INPUT_KEYBOARD		= 1
    	KEYEVENTF_KEYUP		= 0x2
    	KEYEVENTF_UNICODE	= 0x4
    FIN
     
    ST_INPUT_KB est structure
    	type est entier sans signe sur 4
    	wVk est entier sans signe sur 2
    	wScan est entier sans signe sur 2
    	dwFlags est entier sans signe sur 4
    	time est entier sans signe sur 4
    	dwExtraInfo est entier système
    	padding est entier sur 8	// Pour avoir exactement la même structure qu'en C, à cause de l'union
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    stInput est un ST_INPUT_KB
     
    stInput.type = INPUT_KEYBOARD
    stInput.wVk = 0
    Transfert(&stInput.wScan, &sCaract, 2)	// Comme Asc(sCaract), mais en unicode
    stInput.dwFlags = KEYEVENTF_UNICODE
    stInput.time = 0
    stInput.dwExtraInfo = 0
    API("user32.dll", "SendInput", 1, &stInput, Dimension(stInput))
    PS. Je rajoute un exemple en PJ.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Wow je suis bluffé,
    merci d'avoir pris le temps de répondre ton code est vraiment super !!
    Merci encore

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

Discussions similaires

  1. clavier virtuel sur Formulaire
    Par db48752b dans le forum IHM
    Réponses: 9
    Dernier message: 01/03/2017, 11h30
  2. clavier virtuel =)
    Par Ludo_360 dans le forum Delphi
    Réponses: 2
    Dernier message: 27/04/2007, 15h45
  3. Lancement du clavier virtuel
    Par rzayani dans le forum Windows
    Réponses: 1
    Dernier message: 21/08/2006, 16h16
  4. Programmer un clavier virtuel
    Par juvamine dans le forum Windows
    Réponses: 1
    Dernier message: 30/07/2006, 17h47
  5. Clavier virtuel
    Par ouquoi dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2006, 11h33

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