Compte à rebours

silversword666 Messages postés 10 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 13 mai 2009 - 12 mai 2009 à 18:21
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 - 17 mai 2009 à 12:45
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.
A voir également:

5 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 mai 2009 à 18:43
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;
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
12 mai 2009 à 18:46
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%" />
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 11
12 mai 2009 à 18:53
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 }
0
silversword666 Messages postés 10 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 13 mai 2009
13 mai 2009 à 11:19
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 11
17 mai 2009 à 12:45
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 }
0