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

 Delphi Discussion :

[TForm.Deactivate] Ne se declenche pas !


Sujet :

Delphi

  1. #1
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut [TForm.Deactivate] Ne se declenche pas !
    Bonjour, mon petit souci du jour commence a m'enerver :

    J'ai surcharger la classe TForm pour avoir des fenetres securisees TFormSecurisee, avec acces par mot de passe, et timer qui redemande le mot de passe au bout de X secondes d'inactivite.

    J'ai surcharge les evenements standard TForm.Activate et TForm.Deactivate pour faire diverses operations : par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TFormSecurisee.Activate
    begin
      // Je redemande le mot de passe
    end;
    Seulement : Je me rends compte que Activate n'est appelee QUE lors du premier affichage de ma fenetre, FenetreSecurisee.ShowModal. Il n'est plus appele par la suite, notamment lorsque j'ouvre une autre fenetre et que je reviens sur la premiere.
    Quant a Deactivate, lui n'est carrement jamais appele !!!
    alors qu'elle perds le focus lorsque j'ouvre une autre fenetre !!!

    Est ce du au fait que mes fenetres sont modales ?
    J'ai essaye avec des fenetre MDI, mais ca ne me convient pas !
    Alors comment faire ?

    Merci d'avance ;o)

    PS : J'ai mis ma config dans la signature, mais elle ne s'affiche pas !
    Donc je bosse avec Delphi 6 Entreprise dans l'envirronement CLX.

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Ca a l'air d'être du Delphi, je déplace dans le bon forum

  3. #3
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Euh oui, j'ai du faire une erreur quelque part, desole !
    Merci de l'avoir remis sur le bon forum !

  4. #4
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Tes évènements sont coincés parce que tu travailles en modal. Surcharge ShowModal.

  5. #5
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Je confirme, meme l'evenement Ondeactivate de la classe TForm ne se declenche jamais : ni a la perte du focus au profit d'une autre fenetre, ni lors de sa fermeture !!!

    N'ai je pas mis la le doigt sur un bug Delphi ?

    Je rappelle que je travail avec la CLX, et je n'en suis pas a ma premiere deception !

  6. #6
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par kase74
    Je confirme, meme l'evenement Ondeactivate de la classe TForm ne se declenche jamais : ni a la perte du focus au profit d'une autre fenetre, ni lors de sa fermeture !!!
    Mais si. Tu n'a qu'à faire un essai :
    Deux fiches, un bouton sur la première
    L'évènement du bouton c'est Form2.Show;
    Tu codes les évènements onActivate et onDeactivate de ta form2.

    Exécute. Et tu vas voir, qu'en non modal, les évènements se déclenchent.

  7. #7
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Merci MD pour ta reponse.

    Question : Pourquoi le fait d'etre en modal m'interdit d'implementer Ondeactivate ?

    Surcharger ShowModal, OK, mais ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TFenetreSecurisee.ShowModal : integer;
      Self.activate;
      inherited;
      Self.deactivate;
    D'accord, ca resoud le probleme pour l'ouverture et la fermeture de la fenetre, mais pas quand elle perd le focus au profit d'une autre fenetre.
    Tu me diras, c'est deja les 2/3 du pb qui est resolu, mais ...

  8. #8
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par kase74
    Question : Pourquoi le fait d'etre en modal m'interdit d'implementer Ondeactivate ?
    Parce que la fiche n'est pas désactivée, c'est tout
    Citation Envoyé par kase74
    quand elle perd le focus au profit d'une autre fenetre.
    C'est pas elle-même qui déclenche l'affichage des autres fenêtre ?

  9. #9
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Exacte, avec Show, les evenements se declenche.
    Ca va meme trop vite :o) :
    Ma fiche est cree;
    je l'affiche avec Show;
    l'evenement OnActivate est leve; OK ;o)
    Mais tout de suite apres, je rentre dans l'evenement OnDeactivate, et je ne vois pas ma fiche a l'ecran, je reviens sur la fenetre initiale ! :o(

    Desole, mais je n'ai pas l'habitude de travailler avec autre chose que des fenetres modales, et la je suis un peu deroute !

  10. #10
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Lorsque tu travailles en non modal, l'évènement onDeactivate est appellé à chaque fois que ta fiche perd le focus. Donc, si ton code ferme la fenêtre lors du onDeactivate, elle va se fermer dès qu'elle va perdre le focus

  11. #11
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par MD Software
    Citation Envoyé par kase74
    Question : Pourquoi le fait d'etre en modal m'interdit d'implementer Ondeactivate ?
    Parce que la fiche n'est pas désactivée, c'est tout
    Citation Envoyé par kase74
    quand elle perd le focus au profit d'une autre fenetre.
    C'est pas elle-même qui déclenche l'affichage des autres fenêtre ?
    Si, c'est depuis Form1 que je fait Form2.ShowModal.
    Et en faisant comme ca, Form1 n'est pas desactive ? Pourtant elle perd le focus !

    Voila precisement le shema type que j'applique. Je suis dans Form1, et j'ai un bouton Button1. Le code de mon bouton est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Form1.button1OnClick(...)
      Form2:=TForm2.Create(Self);
      try
        Form2.ShowModal;
        // Eventuellement, j'effectue un traitement en fonction de la reponse de Form2
      finally
        Form2.Release;
        Self.SetFocus
      end;

  12. #12
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par kase74
    Si, c'est depuis Form1 que je fait Form2.ShowModal.
    Et en faisant comme ca, Form1 n'est pas desactive ? Pourtant elle perd le focus !
    Oui, mais elle n'est pas désactivée
    Citation Envoyé par kase74
    Voila precisement le shema type que j'applique. Je suis dans Form1, et j'ai un bouton Button1. Le code de mon bouton est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Form1.button1OnClick(...)
      Form2:=TForm2.Create(Self);
      try
        Form2.ShowModal;
        // Eventuellement, j'effectue un traitement en fonction de la reponse de Form2
      finally
        Form2.Release;
        Self.SetFocus
      end;
    Pourquoi tu ne fais pas ton traitement autour du ShowModal ?

  13. #13
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Pffft, c'est peut etre la chaleur, mais j'ai du mal !!!

    Pourquoi tu ne fais pas ton traitement autour du ShowModal ?
    Comment ca ?
    En faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TFenetreSecurisee.ShowModal : integer; 
      Self.activate; 
      inherited; 
      Self.deactivate;

  14. #14
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Form1.button1OnClick(...) 
      Form2:=TForm2.Create(Self); 
      try 
        //Code à l'ouverture
        Form2.ShowModal; 
        // Code à la fermeture
      finally 
        Form2.Release; 
        Self.SetFocus 
      end;

  15. #15
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Ah ! Oui, bien sur, mais jen ai plein de fenetres securisee, et de Showmodal !

    J'aurais voulu que ce soit propre et generalise en le faisant au niveau de la classe TFenetreSecurisee ! Si Deactivate s'etait declenche comme je le pense, c'etait top nickel !!!
    Mais bon voila ! A defaut de trouver mieux, je vais reviser mon code et faire attention d'inclure les appels Activate et Deactivate autour de chaque ShowModal lance depuis une TFenetreSecurisee.

    En tout cas, merci beaucoup pour tes lumieres

  16. #16
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Mais, si ton form2 est sécurisé, alors le traitement en dans la redéfintion du ShowModal [ce qu'on a dit au début]

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

Discussions similaires

  1. [Trigger After Insert ne se declenche pas]
    Par Ramajb dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/03/2011, 15h41
  2. SelectedIndexChanged ne se declenche pas !
    Par rad_hass dans le forum ASP.NET
    Réponses: 7
    Dernier message: 06/04/2009, 19h45
  3. BeforeNavigate2 se declenche pas
    Par bubu92 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/02/2009, 15h51
  4. L'evenement onchange de ma combo ne se declenche pas
    Par ndsaerith dans le forum Delphi
    Réponses: 7
    Dernier message: 22/12/2006, 11h55
  5. Evénement clicked ne se déclenche pas
    Par fmolko dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 09/08/2006, 11h53

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