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 :

Fermer une forme dynamique après un certain temps.


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut Fermer une forme dynamique après un certain temps.
    Bonjour,

    J'ai une procédure qui fait afficher une forme dynamiquement. J'aimerais bien que si cette forme est affichée qu'elle se ferme automatiquement, par example après 10 secondes.

    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 TFormDy.HiShowFormDy(sTxt: string);
    var
     FormV: TForm;
    begin
     
     FormV := TForm.Create(nil); 
     try
     ..
     ..  
      FormV.OnClose := HiFormClose; 
      FormV.OnShow := HiOnShow;
      ..
      FormV.ShowModal;
     finally
      FormV.Free;
     end;
    end;
    J'ai fait un timer, mais je ne sais pas comment mettre la formV.close*;

    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
     
    procedure TFormDy.HiOnShow(Sender: TObject);
    begin
     ig_Count := 0;
     Timer1 := TTimer.Create(nil);
     Timer1.OnTimer := HiTimer1Timer;
     Timer1.Interval := 1000;
     Timer1.Enabled := True;
    end;
     
    procedure TFormDy.HiTimer1Timer(Sender: TObject);
    begin
     Inc(ig_Count);
    if  ig_Count > 10 then formV.close; // <-- ERROR
    end;
    Que pouvez vous me proposer..., (je n'ai pas obligatoirement besoin d'un timer, un sleep(10000) pourrais aussi faire l'affaire mais ou le placer...)

    Je vous remercie beaucoup pour l'aide.
    Salutation.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    à essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFormDy.HiTimer1Timer(Sender: TObject);
    begin
      Inc(ig_Count);
      if  ig_Count > 9 then self.Modalresult := -1;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Merci pour ta réponse, malheureusement je reçois une erreur (..raised exception class EAccessViolation ..) Merci pour vos idés!

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    OOops... j'ai cru que le code Timer était dans la fiche modale elle-même

    essaye FormV.ModalResult := -1;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Le problème est que la Formv est déclarée dans la procedure TFormDy.HiShowFormDy(sTxt: string); et non global!

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Est-ce que on peut faire passer un paramêtre dans

    HiOnShow(??FormV) puis de le faire passer par
    HiTimer1Timer(??FormV) et enfin mettre dans la
    procedure TFormDy.HiTimer1Timer(Sender: TObject ->[qui est FormV]);

    if ig_Count > 10 then formV.close;

    Je ne sais pas si mon raisonement est correct, Merci pour l'aide.

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    C'est donc FormV qui doit avoir un timer et le code qui affecte son modalresult au bout de 10".

    A toi de lui affecter le timer et le ontimer et elle s'autodétruira...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Voici ce que j'ai fais mais la form ne ce ferme pas ...

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    type
     TFormDy = class(TForm)
     private
     published
      procedure HiShowFormDy(sTxt: string; iTop, iLeft: integer);
      procedure HiFormClose(Sender: TObject; var Action: TCloseAction);
      procedure HiOnShow(Sender: TObject);
      procedure HiTimer1Timer(Sender: TObject);
     end;
     
    var
     FormDy: TFormDy;
     ig_Count: integer;
     Timer1: TTimer;
    ..
    ..
     
    procedure TFormDy.HiShowFormDy(sTxt: string);
    var
     FormV: TForm;
    begin
     
     FormV := TForm.Create(nil); 
     try
     ..
      FormV.OnClose := HiFormClose; 
      FormV.OnShow := HiOnShow;
      ..
    //-----------------
      ig_Count := 0;
     Timer1 := TTimer.Create(FormV);
     Timer1.OnTimer := HiTimer1Timer;
     Timer1.Interval := 1000;
     Timer1.Enabled := True;
     //-------------------
      FormV.ShowModal;
     finally
      FormV.Free;
     end;
    end;
     
    procedure TFormDy.HiTimer1Timer(Sender: TObject);
    begin
     
     Inc(ig_Count);
    if ig_Count >= 4 then 
       //self.Modalresult := -1; // error
       // FormV.ModalResult := -1; // ne compile pas
        TForm(Sender).ModalResult := -1; //Pas d'erreur mais la form FormV ne ce ferme pas 
    end;
    Que dois corriger, merci

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 710
    Points : 13 174
    Points
    13 174
    Par défaut
    Je répète ce que dit tourlourou : c'est sur la deuxième fiche qu'il faut poser ce timer et dans son événement, simplement ModalResult := mrOk;. La fiche principale elle, est bloquée sur ShowModal.

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Désolé mais je n'ai pas encore bien compris ... ma fiche en question est une unit j'ai mis TFormDy = class(TForm) pour pouvoir configurer les évenements de ma fiche FormV dynamique, aurrais tu un petit example. Merci

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 403
    Points : 3 012
    Points
    3 012
    Par défaut
    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
    41
    42
    43
    44
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
      private
        procedure Fermer(Sender: TObject);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Fermer(Sender: TObject);
    begin
      ((Sender as TTimer).Owner as TForm).ModalResult := mrok;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      F: TForm;
      T: TTimer;
    begin
      F := TForm.Create(nil);
      T := TTimer.Create(F);
      T.Interval := 5 * 1000;
      T.OnTimer := Fermer;
      F.ShowModal;
      F.Release;
    end;
     
    end.

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    J'apprécie pour ton exemple et ton aide, j'ai fait des tests c'est ok.
    Merci et bonne fin de journée.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/06/2008, 21h33
  2. Ouvrir un popup après un certain temps
    Par Oberown dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 17h06
  3. Comment fermer une popup après un certains temps ?
    Par magic8392 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/10/2005, 12h06
  4. Réponses: 5
    Dernier message: 25/07/2005, 14h03
  5. Ouvrir une fenêtre et la fermer après un certain temps
    Par MiJack dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/03/2005, 17h16

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