Compte à rebours

Signaler
Messages postés
10
Date d'inscription
jeudi 14 juin 2007
Statut
Membre
Dernière intervention
13 mai 2009
-
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
-
Bonsoir,

Je tente dans un programme, d'utiliser un compte à rebours de 5 minutes, avec affichage de ce compte à rebours et au bout des 5 minutes, une impossibilité d'écrire dans un TEdit.
Pour la partie interdiction d'écrire dans le TEdit, je devrais m'en sortir, mais est-il possible de créer un compte à rebours avec un TTimer ou dois-je créer une fonction?

Merci d'avance pour vos réponses et bonne soirée!
Cordialement,
SSW666.

5 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Salut,

Oui, utilise un timer, c'est le plus simple. Mais un entier comme champ privé de ta form et décrémente le dans le timer.

type
  TForm1 = class(TForm)
  private
    nCount: Integer;
  end;
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
const
  MaxCounter = 5*60; // 5 minutes

var
  Counter : cardinal =  0;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 1000;
  Timer1.Enabled := false;
end;

procedure TForm1.EvenementQuiDeclancheLeCompteARebour(Sender: TObject);
begin
  Counter := 0;
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // incremente de 1 toute les secondes le compteur

  inc(Counter);

  // affichage du compteur

  LabelCounter.Caption := format('%.2d:%.2d',[Counter div 60, Counter mod 60]);

  // Si compteur = 5 minutes
  if Counter = MaxCounter then
  begin
    Timer1.Enabled := false;
    ProcedureQuiDesactiveLEdit;
  end; 
end;
 

<hr size="2" width="100%" />
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
10
Plutôt que de créer des variables globales, autant mettre la valeur de compteur dans la propriété Tag du TEdit et décrémenter jusqu'à 0.
Et pour l'interdiction d'écriture, faire :
Edit.ReadOnly := true;

@+
Nico { www.ni69.info }
Messages postés
10
Date d'inscription
jeudi 14 juin 2007
Statut
Membre
Dernière intervention
13 mai 2009

Bonjour,

Dans un premier temps, merci pour vos réponses!

Voici ce que donne mon code pour le moment :





unit Saisie;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls;


type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Nouveau1: TMenuItem;
    Quitter1: TMenuItem;
    N1: TMenuItem;
    Apropos1: TMenuItem;
    Aide1: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Edit1: TEdit;
    Timer1: TTimer;
    LabelCounter: TLabel;


    procedure Quitter1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure FormCreate(Sender: TObject);
    procedure EvenementQuiDeclancheLeCompteARebour(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);


   
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;


const
  MaxCounter = 5*60; // 5 minutes


var
  Form1: TForm1;
  Chaine: string;
  Counter : cardinal =  0;




implementation


{$R *.dfm}




procedure TForm1.Quitter1Click(Sender: TObject);
begin
Application.Terminate;
end;




procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if Key = #13 then
  begin
    Chaine := Edit1.Text;
    Edit1.Clear;
  end;
end;




procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 1000;
  Timer1.Enabled := false;
end;




procedure TForm1.EvenementQuiDeclancheLeCompteARebour(Sender: TObject);
begin
  Counter := 0;
  Timer1.Enabled := true;
end;




procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // incremente de 1 toute les secondes le compteur
  inc(Counter);


  // affichage du compteur
  LabelCounter.Caption := format('%.2d:%.2d',[Counter div 60, Counter mod 60]);


  // Si compteur = 5 minutes
  if Counter = MaxCounter then
  begin
    Timer1.Enabled := false;
    Edit1.Enabled:=false;
  end;
end;




end.

Pour ce qui est du TForm1.Edit1KeyPress =>
La frappe de la touche Entrée ne fonctionne pas, lorsque j'appuie sur cette touche, j'ai un bip et rien ne se passe. J'ai créé un label test et rajouté une ligne LabelTest.caption:=Chaine; après Chaine := Edit1.Text; mais rien ne s'affiche.

Pour ce qui est de la partie Compte à rebours, je n'ai pas d'affichage de celui-ci et au bout des 5 minutes, le Edit1.Enabled ne passe pas à false. Est-ce que j'ai raté quelque chose?
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
10
EvenementQuiDeclancheLeCompteARebour
Il ne suffit pas de l'écrire dans le code, il faut l'inclure dans l'inspecteur d'objets ou en faire un appel à partir d'un autre événement..
C'est valable aussi pour le OnKeyPress.

Il faut penser à lire ce que l'on te donne, tenter de le comprendre et penser à l'adapter à ton cas particulier, et non pas faire un copier/coller du code. Un conseil, prends un bon tutorial pour commencer à te familiariser avec la gestion des événements, sinon tu n'iras pas très loin en Delphi.

@+
Nico { www.ni69.info }