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 :

TCustomForm.onHide et/ou TTimer récalcitrant ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut TCustomForm.onHide et/ou TTimer récalcitrant ?
    Bonjour,

    Voici un programme ultra-simple qui ne comporte que deux Forms et un timer (inverval:=1000). Timer1 est placé sur Form1 et il n'y a rien sur Form2.
    Lorqu'on lance l'application, Form1 apparait et Form2 est alternativement visible pendant 1 seconde et cachée pendant 1 seconde. Tout cela est normal.
    Si on clique sur le contrôle "réduire" (minimize) de la barre des titres de Form1, cette Form1 devient cachée, ce qui est normal. Mais Form2 continue imperturbablement à être alternativement visible et cachée, au lieu de cesser de réapparaître.
    La propriété onHide de Form1, qui engage la procédure TForm1.FormHide, ne semble donc pas fonctionner, à moins que cela ne vienne d'un timer récalcitrant à bien vouloir s'arrêter ?
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,menus,ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormHide(Sender: TObject);
      private
        { Déclarations privées}
      public
        { Déclarations publiques}
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses Unit2;
     
    {$R *.DFM}
     
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
         if form2.visible=true then form2.visible:=false else form2.visible:=true;
    end;
     
    procedure TForm1.FormHide(Sender: TObject);
    begin
         timer1.enabled:=false;
         Form2.visible:=false;
    end;
     
    end.

  2. #2
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Je ne comprends pas trop...

    La propriété onHide de Form1, qui engage la procédure TForm1.FormHide, ne semble donc pas fonctionner, à moins que cela ne vienne d'un timer récalcitrant à bien vouloir s'arrêter ?
    Mais seule Form2 est pointée, nulle part Form1.

    Mais Form2 continue imperturbablement à être alternativement visible et cachée, au lieu de cesser de réapparaître.
    Alors pourquoi voudrais-tu que Form1 soit dans le coup ?

    @+

  3. #3
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Alors, c'est moi qui ne comprends pas :
    Selon le code précédent, lorsqu'on clique sur le contrôle "réduire" de sa barre des titres, Form1 devient caché (c'est à dire Form1.visible=false) et la procédure Form1Hide devrait s'exécuter, donc Timer1 devrait s'arrêter.
    Il y a quelque chose d'élémentaire qui m'échappe !

  4. #4
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Citation Envoyé par JJJJJ Voir le message
    Alors, c'est moi qui ne comprends pas :
    Selon le code précédent, lorsqu'on clique sur le contrôle "réduire" de sa barre des titres, Form1 devient caché (c'est à dire Form1.visible=false) et la procédure Form1Hide devrait s'exécuter, donc Timer1 devrait s'arrêter.
    Il y a quelque chose d'élémentaire qui m'échappe !
    Hé oui après tout... au fait et si tu ajoutes un ShowMessage ou un Beep dans cette proc FormHide ; est-ce que ça se déclenche ?

  5. #5
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Bon, puisqu'on n'arrive pas à se comprendre, je vais poser la question d'une façon encore plus concrète :
    Que faut-il corriger dans le code précédent pour que, lorsqu'on clique sur le contôle "réduire" de la barre des titres de Form1, alors Form2 ne soit plus visible et ne réapparaisse pas périodiquement ?

    P.S. : j'avais écrit cela avant d'avoir vu ton nouveau message. Je vais essayer les tests que tu suggères.

  6. #6
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Attends, attends,

    Je viens de tester avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    procedure TForm1.FormHide(Sender: TObject);
    begin
      timer1.enabled:=false;
      Form2.visible:=false;
      ShowMessage('Form1 = Hide');
    end;
     
    ...
    Sous mon Vista, si Form1 en Hide = je ne revois plus Form2.
    Donc pour moi, ton code fonctionne normalement.

    Mais le plus curieux est que le ShowMessage ne se déclenche pas...

    @+

  7. #7
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Re-bonjour et suite :

    J'ai fait comme toi, avec ShowMessage et Beep.
    Rien ne se passe, ni message, ni beep et Form2 continue à réapparaitre périodiquement.
    Donc pour moi, la conclusion est claire :
    Le contrôle "réduire" de la barre des titres ne provoque pas l'exécution de la procédure Form1Hide.
    Je suis sous WindowsXP et Deplhi4. Il y aurait donc (?) une différence au niveau système ou version de Delphi, entre ton environnement et le mien, puisque dans ton cas, Form2 ne réapparait pas ?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  2. [Kylix] TTimer et application console
    Par Estats dans le forum EDI
    Réponses: 3
    Dernier message: 24/01/2005, 16h12
  3. Update récalcitrant !
    Par Jeannotc dans le forum Bases de données
    Réponses: 10
    Dernier message: 16/06/2004, 18h28
  4. Comment est géré l'événement OnTime du Composant TTimer?
    Par Arnaud-h dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/06/2004, 17h10
  5. Un "0" récalcitrant
    Par bidson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/04/2004, 13h56

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