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

Composants VCL Delphi Discussion :

probleme de setfocus


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut probleme de setfocus
    Bonjour,

    J'ai juste une question qui va paraitre simpliste mais elle me perturbe.
    J'ai un tedit (montexte) et un bouton.
    Dans le Tedit j'ai un évènement editenter.
    Au milieu de la procédure de l'évènement click du bouton, je fais un montexte.setfocus.
    Le programme va-t'il effectuer les instructions situées après le setfocus et ensuite entrer dans l'évènement editenter ou l'inverse ou autre chose....

    Qui peut m'aider,
    Merci d'avance,

    Fred

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 551
    Points : 25 122
    Points
    25 122
    Par défaut
    C'est une bonne Question !

    En fait, le SetFocus sur un Edit va modifier le ActiveControl de la Form Parent de l'Edit, appelle Windows.SetFocus qui modifie directement le Focus du Control (là les Events OnEnter et OnExit) puis va envoyer un message CM_UIACTIVATE pour indiquer que le Focus a bien changer !

    Et Donc si l'on fait un code simple, on constate que le SetFocus se produit immédiatement !

    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
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage('Avant SetFocus');
      Edit3.SetFocus();
      ShowMessage('Après SetFocus');
    end;
     
    procedure TForm1.Edit3Enter(Sender: TObject);
    begin
      ShowMessage('Edit3Enter');
     
    end;
     
    procedure TForm1.Button2Exit(Sender: TObject);
    begin
      ShowMessage('Button2Exit');
     
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut setfocus
    Merci beaucoup pour votre réponse.
    Entretemps, j'ai fait un debugging pas à pas dans la procédure possédant l'appel setfocus et ai remarqué que le programme, après l'instruction setfocus, va directement au end de la procédure.
    Ca confirme ce que vous m'avez écrit.

    Maintenant si le setfocus est dans un try et qu'il existe un finally, les instructions dans le finally seront-elles effectuées ???

    Bon, grand merci quand même,

    Fred

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 551
    Points : 25 122
    Points
    25 122
    Par défaut
    Euh, SetFocus n'amène pas au "end", chez moi il execute les messages dans cet ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ShowMessage('Avant SetFocus');
    ShowMessage('Button2Exit');
    ShowMessage('Edit3Enter');
    ShowMessage('Après SetFocus');
    il n'est pas censé faire sortir de la fonction !
    Pour le Try finally c'est bien son but ! Normalement tu ne devrais pas en avoir besoin !
    ou Alors il y a une exception qui se produit dans un Event OnEnter\OnExit ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. [AC-2003] probleme de setfocus
    Par roustif dans le forum IHM
    Réponses: 4
    Dernier message: 16/06/2009, 20h51
  2. Probleme de SetFocus
    Par nuFox dans le forum IHM
    Réponses: 5
    Dernier message: 21/12/2008, 11h27
  3. probleme avec setfocus
    Par cheuch dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/12/2007, 12h58
  4. Probleme avec SetFocus
    Par monsurf dans le forum Access
    Réponses: 14
    Dernier message: 07/06/2006, 17h37
  5. probleme avec SetFocus
    Par firejocker dans le forum MFC
    Réponses: 4
    Dernier message: 05/12/2005, 12h34

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