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

C++Builder Discussion :

R�alisation d'un clavier virtuel


Sujet :

C++Builder

  1. #1
    Membre confirm� Avatar de marcootz
    Homme Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 159
    Par d�faut R�alisation d'un clavier virtuel
    Salut � tous,
    Pour les besoins d'une application je dois r�aliser un clavier virtuel, dans le style de celui pr�sent dans Windows.

    J'ai donc dans mon appli une page avec un TEdit. Dans l'�v�nement "OnEnter" de ce TEdit, j'appelle ma fiche "Clavier", qui passe donc en premier plan. Sur cette fiche clavier je clique sur le bouton "A", je fais pass� ma premi�re fiche en premier plan, j'envoie l'�v�nement clavier correspondant � la touche "A" et le caract�re "A" s'affiche dans mon Edit.
    Jusque la donc tous va bien.

    Mais ensuite j'aimerais que mon clavier reste en premier plan pour saisir la deuxi�me lettre, mais impossible de faire �a.

    Voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Appel de mon clavier à partir de la première fiche :
     
    void __fastcall TForm1::Edit1Enter(TObject *Sender)
    {
    	//hFenetre est de type HWND, c'est le handle de ma fiche qui contient le edit 
    	FClavierVirtuel->hFenetre = GetForegroundWindow();
    	FClavierVirtuel->Show();
    }
    Le clavier passe en premier plan et j'appuie sur "A"

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TFClavierVirtuel::AClick(TObject *Sender)
    {
    	HWND hClavier = GetForegroundWindow();
    	SetForegroundWindow(hFenetre);
    	Sleep(50);
    	keybd_event('A',0x29,0,0);// Simulation appuie a
    	keybd_event('A',0x29,KEYEVENTF_KEYUP,0);//Relache a
    	Sleep(50);
    	//SetForegroundWindow(hClavier);
    }
    C'est cette ligne qui me pose souci "SetForegroundWindow(hClavier);". Sans elle le clavier fonctionne mais apr�s un clic il reste derri�re. Si je met cette ligne pour faire passer ma fen�tre "Clavier" devant �a ne marche plus.

    Avez vous une petite id�e ??

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par d�faut
    V�rifie que tu as bien la bonne fen�tre... (via un getWindowName() par exemple...)

  3. #3
    Membre confirm� Avatar de marcootz
    Homme Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 159
    Par d�faut
    Oui je pense que c'est bien la bonne fenetre. J'ai utilis� le code founi dans la FAQ :
    http://cpp.developpez.com/faq/bcb/?p...assnamefenetre

    Ce qui est bizarre c'est quand je met la ligne "SetForegroundWindow(hClavier);" mon caract�re saisi n'apparait plus dans la zone de texte de ma page principale...

  4. #4
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par d�faut
    le truc , c est de faire comme sur psp ou ps3

    le clavier virtuel contient lui meme un edit

    et

    un bouton enter pour envoyer le texte saisi vers un autre edit dans ton cas


    penses egalement � recuperer la chaine presente dans ton edit "principal" lorsque que tu appelles ton clavier ( pour les erreurs de saisie ) .


    Enfin pourquoi ne pas utiliser un Tpanel dont tu passes la propriet� visible � true ou false , �� faciliterait le boulot je pense .

  5. #5
    Membre confirm� Avatar de marcootz
    Homme Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 159
    Par d�faut
    C'est vrai que l'id�e du TPanel aurait �t� beaucoup plus simple mais j'ai besoin du clavier dans plusieurs fiches et j'aimerais pouvoir avoir une forme s�par� que j'appelle au besoin.

    Sinon pour le coup de l'edit sur le clavier c'est une bonne id�e, mais c'est dommage car je suis sur qu'il y a un moyen simple pour avoir le m�me fonctionnement qu'un clavier virtuel classique.

    Merci
    A+

  6. #6
    Membre confirm� Avatar de marcootz
    Homme Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 159
    Par d�faut
    Bon en fait j'ai r�ussi � m'en sortir en utilisant un timer. Lors du clic sur ma touche 'A', j'active un Timer de 10ms qui fait repasser ma fiche clavier au premier plan :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void __fastcall TFClavierVirtuel::AClick(TObject *Sender)
    {
    	SetForegroundWindow(hFenetre);
    	Sleep(50);
    	keybd_event('A',0x29,0,0);// Simulation appuie a
    	keybd_event('A',0x29,KEYEVENTF_KEYUP,0);//Relache a
    	Timer1->Enabled=true;
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    void __fastcall TFClavierVirtuel::Timer1Timer(TObject *Sender)
    {
    	SetForegroundWindow(hClavier);
    	Timer1->Enabled = false;	
    }
    Voil� c'est bancal mais �a marche. Pour l'instant je laisse comme �a mais si vous avez une meilleure id�e je suis preneur.

    En tout cas merci pour votre aide.

    A+

+ 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