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 :

Problème de CanFocus avec SetFocus


Sujet :

Composants VCL Delphi

  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut Problème de CanFocus avec SetFocus
    Bonjour,
    Dans mes fiches, je vérifie toujours que le contrôle peux recevoir le focus avant de le lui donner via le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if editUser.CanFocus then
        editUSer.SetFocus;
    Malhereusement, je recois de temps en temps l'erreur
    Cannot focus a disabled or invisible window
    D'ou la question comment eviter ce genre d'erreur.
    Merci
    On progresse .....

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    CanFocus, cela doit être une validité VCL du Focus, cela vérifie Enabled et Visible selon la documentation

    Mais Visible est à True pour les TControl dans le constructor d'une TForm car la valeur est lue dans le DFM, c'est la valeur brute de conception
    True à Visible c'est même la valeur par défaut pour tous TControl sauf cas spéciaux, comme la TForm où l'on il faudra attendre un Show ou ShowModal
    Donc ton tu peux instancier un TEdit, il sera True pour Visible dès le début même sans Parent
    A ce stade, il manque un élément crucial, le Handle !

    Il ne suffit pas que Enabled et Visible soit tous à True (du TControl receveur jusqu'à son ultime Parent), il faut aussi que l'ultime Parent ait un Handle (et toute l'arborescence de TWinControl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if editUser.CanFocus() and editUser.HandleAllocated() then
        editUSer.SetFocus();
    tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if editUser.CanFocus() and Self.Visible then
        editUSer.SetFocus();
    Car Visible d'une TForm est généralement à False, important pour les débutants qui utilisent les fiches créées automatiquement (en dehors du MainForm, une chose à bannir)
    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 éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    CanFocus, cela doit être une validité VCL du Focus, cela vérifie Enabled et Visible selon la documentation

    Mais Visible est à True pour les TControl dans le constructor d'une TForm car la valeur est lue dans le DFM, c'est la valeur brute de conception
    True à Visible c'est même la valeur par défaut pour tous TControl sauf cas spéciaux, comme la TForm où l'on il faudra attendre un Show ou ShowModal
    Donc ton tu peux instancier un TEdit, il sera True pour Visible dès le début même sans Parent
    A ce stade, il manque un élément crucial, le Handle !

    Il ne suffit pas que Enabled et Visible soit tous à True (du TControl receveur jusqu'à son ultime Parent), il faut aussi que l'ultime Parent ait un Handle (et toute l'arborescence de TWinControl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if editUser.CanFocus() and editUser.HandleAllocated() then
        editUSer.SetFocus();
    tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if editUser.CanFocus() and Self.Visible then
        editUSer.SetFocus();
    Car Visible d'une TForm est généralement à False, important pour les débutants qui utilisent les fiches créées automatiquement (en dehors du MainForm, une chose à bannir)
    Merci ShaiLeTroll.
    Le problème est résolu.
    Andry
    On progresse .....

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

Discussions similaires

  1. [AC-2016] Problème avec Setfocus sur un formulaire tabulaire modifiable
    Par juju05 dans le forum Access
    Réponses: 2
    Dernier message: 08/10/2017, 07h44
  2. [AC-2010] Problème avec SetFocus
    Par prosper02 dans le forum VBA Access
    Réponses: 6
    Dernier message: 04/05/2013, 13h07
  3. [XL-2010] Problème avec SetFocus
    Par Missouflo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/03/2013, 20h52
  4. Problème avec setFocus
    Par veriecherie dans le forum IHM
    Réponses: 8
    Dernier message: 28/07/2009, 10h31
  5. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

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