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 :

Le TEdit ne recçoit plus les messages de la Souris


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Le TEdit ne recçoit plus les messages de la Souris
    Bonjour,

    nous sommes tombés sur un problème Builder avec les TEdit.

    Voici le contexte : dans une fenêtre Builder (TForm), on pose trois TEdit.
    Sur le premier TEdit1, on utilise l'événement OnExit pour déclencher un traitement avec une fenêtre pour afficher la progression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TForm1::Edit1Exit(TObject *Sender)
    {
      TForm * f = new TForm(Application);
      f->Show();
      // Traitement débranché pour l'exemple
      f->Close();
      delete f;
    }
    A l'exécution du programme, le TEdit1 possède le focus.
    Lorsque que l'on clique sur le deuxième TEdit par exemple, la fenêtre s'affiche bien mais le TEdit2 semble ne pas posséder le focus : pas de curseur dans la zone. Il est toute fois possible de saisir au clavier mais il n'y a plus moyen de faire agir la souris pour sélectionner la saisie par exemple. De plus, l'événement OnEnter du Tedit2 ne s'exécute pas.

    Pour récupérer la main sur le composant TEdit2 avec la souris, il faut cliquer dansle troisième TEdit puis revenir dans le TEdit2.

    Ce problème est reproductible en Builder 6.

    Merci de votre aide.

  2. #2
    Membre habitué Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Points : 132
    Points
    132
    Par défaut
    Si j'ai bien compris, lorsque tu essaies d'activer la saisie du TEdit2, ou bien de faire une sélection dessus, tu as une fenêtre qui s'est ouverte ?
    Ca peut expliquer le problème, car si une fenêtre est ouverte, c'est elle qui possède le focus (ca dépend aussi de la méthode que tu as utilisée pour l'ouvrir) et donc il est normal que le curseur n'apparaisse plus sur tes composants TEDit.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Certes mais comme le montre le code, la fenêtre a été ouverte puis refermée aussitôt.

    Le focus est donc bien redonné à la fenêtre contenant les zones de saisie.
    De plus, le champ de saisie TEdit2 possède bien le focus apparemment puisqu'il reçoit bien les événements clavier mais la souris semble elle désactivée au niveau du TEdit2 puisqu'il ne réagit plus normalement.

  4. #4
    Membre habitué Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Points : 132
    Points
    132
    Par défaut
    T'as essayé de réactiver a la main le composant TEdit2 en refermant la fenetre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->ActiveControl=Edit2;

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Oui, mais la propriété ActiveControl est déjà positionnée sur le TEdit2 sur le OnExit du TEdit1.

    On essaye des choses du genre Edit2->SetFocus(), ... mais rien n'y fait.

    Il y a d'autres choses qui ne fonctionnent plus comme par exemple l'utilisation des propriétés de sélection de texte dans le champ de saisie comme la méthode SelectAll : le texte n'apparaît pas sélectionné.

  6. #6
    Membre habitué Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Points : 132
    Points
    132
    Par défaut
    Et si tu lui demandes d'afficher l'activecontrol en cours de la TForm il répond bien Tedit2 ?

  7. #7
    Membre du Club

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Je me suis penché sur le problème, il semble que ce soit la fermeture et/ou la destruction de l'objet TForm dans le OnExit du TEdit1 qui laisse le TEdit2 en rade.

    La seule solution que j'ai trouvé (attention c'est un peu tordu... ) :

    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
    TForm * f;
     
    void __fastcall TForm2::Edit1Exit(TObject *Sender)
    {
     f = new TForm(Application);
      f->Show();
      Timer1->Enabled = true;
    }
     
     
    void __fastcall TForm2::Timer1Timer(TObject *Sender)
    {
      f->Close();
      delete f;
      Timer1->Enabled = false;	
    }
    On laisse la fenêtre ouverte, l'exécution suis son cours (TEdit2 a bien le focus) et on laisse le timer gérer la fermeture.

    Cela marche mais n'est pas trés satisfaisant, j'aimerai quand même comprendre... : : :

    A+

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Oui, on en était arrivé à ce genre de solution en instanciant dynamiquement un autre Tedit, lui donner le focus puis redonner le focus au Tedit attendu et là c'est bon mais tout cela est un peu OLE OLE !!!

    pour Morgoth, la ActiveControl est effectivement renseigné avec Edit2 car il est affecté avant que le OnExit du Edit1 soit déclenché.

    Merci pour le coup de main.

    A+

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

Discussions similaires

  1. les messages de la souris avec Gtkmm et Libglademm
    Par Krishna dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 21/03/2008, 14h35
  2. Réponses: 10
    Dernier message: 03/01/2007, 10h45
  3. Ne plus afficher les messages de repost des navigateurs
    Par SuperCed dans le forum Langage
    Réponses: 7
    Dernier message: 31/07/2006, 01h11
  4. Réponses: 6
    Dernier message: 25/11/2004, 14h16

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