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 :

Problème avec Mon compte à rebours


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Problème avec Mon compte à rebours
    Bonjour j'ai un problème lorsque je lance mon programme ,le compte à rebours ne dépasse pas une seconde et je ne sais pas pourquoi. Es-ce que quelqu'un peux m'aider à identifié le problème ?

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    unit FichierMain;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
     
    type
      TFenetreMain = class(TForm)
        LblTemps: TLabel;
        Timer1: TTimer;
        LblHeure: TLabel;
        LblMinute: TLabel;
        LblSeconde: TLabel;
        H: TLabel;
        M: TLabel;
        S: TLabel;
        BtnStart: TButton;
        procedure Timer1Timer(Sender: TObject);
        procedure BtnStartClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        Temps:integer;
        Temps1:integer;
        CompteurTemps1:integer;
        LimiteTemps1:integer;
      end;
     
    var
      FenetreMain: TFenetreMain;
     
    implementation
     
    {$R *.dfm}
    procedure Init;
    begin
      FenetreMain.Temps1:=0;
      Fenetremain.CompteurTemps1:=0;
      Fenetremain.LimiteTemps1:=61;
      FenetreMain.Timer1.Enabled:=true;
    end;
     
    procedure TFenetreMain.BtnStartClick(Sender: TObject);
    begin
    FenetreMain.Timer1.Enabled:=true;
    end;
     
    procedure TFenetreMain.Timer1Timer(Sender: TObject);
    var
    CompteurMinute:integer;
    CompteurHeure:Integer;
    begin
    {Chrono Toujours en route}
      Temps:=Temps+1;
      CompteurTemps1:=CompteurTemps1+1;
      LblTemps.Caption:='Chrono : '+IntToStr(Temps);
      {---------ChronoRappel--------}
      while Fenetremain.Temps1 > FenetreMain.LimiteTemps1  do
      begin
     
      end;
      CompteurMinute:=0;
      CompteurHeure:=0;
      FenetreMain.Temps1:=Fenetremain.Temps1+FenetreMain.CompteurTemps1;
      FenetreMain.LblSeconde.Caption:=''+IntToStr(FenetreMain.Temps1);
      //FenetreMain.LblMinute.Caption:=IntToStr(CompteurMinute);
      //FenetreMain.LblHeure.Caption:=IntToStr(CompteurHeure);
      if FenetreMain.Temps1 = 60 then
        begin
          FenetreMain.Temps1:=0;
          CompteurMinute:=CompteurMinute+1;
          FenetreMain.LblMinute.Caption:=IntToStr(CompteurMinute);
          if CompteurMinute=60 then
            begin
              CompteurMinute:=0;
              Compteurheure:=Compteurheure+1;
              Fenetremain.LblHeure.Caption:=IntToStr(CompteurHeure);
            end;
        end;
     
      //if Temps = 20 then
       // begin
        //  ShowMessage('TimeOut');
    //end;
     
    end;
     
    end.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Une boucle vide, inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      while Fenetremain.Temps1 > FenetreMain.LimiteTemps1  do
      begin
     
      end;

    Temps1, LimiteTemps1 ... ne fait pas 20 variables mais un tableau si tu pars sur Temps2, Temps3 ...

    Ton code est compliqué à l'extrème
    Suffit de faire la soustraction entre deux TTime pour avoir un écart, inutile de compter surtout que cela sera faux car le TTimer a une précision avec une marge d'erreur dans les 10ms

    Tu parles de Compte à Rebours mais tu incrémentes, c'est illogique
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Voici bien plus simple

    J'ai doublé volontairement le FMarkTimes pour te montrer le principe du tableau dont il faut gérer soit même la taille
    Contrairement à la liste lbMarkTimes.Items de type TStrings que l'on gère via des méthodes Add et Clear


    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
    procedure TForm1.btnStartClick(Sender: TObject);
    begin
      FStartTime := Now();
      lblStartTime.Caption := FormatDateTime('hh:nn:ss', Now() - FStartTime);
      TimerChrono.Enabled := not TimerChrono.Enabled;
      lbMarkTimes.Items.Clear();
      SetLength(FMarkTimes, 0);
    end;
     
    procedure TForm1.btnMarkClick(Sender: TObject);
    var
      L: Integer;
    begin
      L := Length(FMarkTimes);
      SetLength(FMarkTimes, L + 1);
      FMarkTimes[L] := Now();
     
      lbMarkTimes.Items.Add(FormatDateTime('hh:nn:ss', FMarkTimes[L] - FStartTime));
    end;
     
    procedure TForm1.TimerChronoTimer(Sender: TObject);
    begin
      lblStartTime.Caption := FormatDateTime('hh:nn:ss', Now() - FStartTime);
    end;

    Code dfm : 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
     
    object TimerChrono: TTimer
      Enabled = False
      OnTimer = TimerChronoTimer
      Left = 132
      Top = 96
    end
    object btnStart: TButton
      Left = 3
      Top = 3
      Width = 75
      Height = 25
      Caption = 'Start'
      TabOrder = 0
      OnClick = btnStartClick
    end
    object btnMark: TButton
      Left = 84
      Top = 3
      Width = 75
      Height = 25
      Caption = 'Mark'
      TabOrder = 1
      OnClick = btnMarkClick
    end
    object lblStartTime: TLabel
      Left = 3
      Top = 34
      Width = 61
      Height = 13
      Caption = 'StartTime : ?'
    end
    object lbMarkTimes: TListBox
      Left = 3
      Top = 53
      Width = 121
      Height = 207
      ItemHeight = 13
      TabOrder = 2
    end
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci Pour ta réponse j'ai vu la boucle après que j'ai poster j'ai un peu honte mdr
    bref j'ai fait autrement je t'envoie le code tu me dit si c'est propre sinon je prends en note le tien
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     public
        { Déclarations publiques }
        Temps:integer;
        Temps1:integer;
        CompteurTemps1:integer;
        LimiteTemps1:integer;
        CompteurMinute:integer;
        CompteurHeure:integer;
      end;
     
    var
      FenetreMain: TFenetreMain;
     
    implementation
     
    {$R *.dfm}
    procedure Init;
    begin
      FenetreMain.Temps1:=0;
      Fenetremain.CompteurTemps1:=0;
      Fenetremain.LimiteTemps1:=61;
      FenetreMain.Timer1.Enabled:=true;
      FenetreMain.CompteurMinute:=0;
      FenetreMain.CompteurHeure:=0;
    end;
     
    procedure TFenetreMain.BtnStartClick(Sender: TObject);
     
    begin
    FenetreMain.Timer1.Enabled:=true;
     
    end;
     
    procedure TFenetreMain.Timer1Timer(Sender: TObject);
    var
    CompteurMinute:integer;
    CompteurHeure:Integer;
    begin
    {Chrono Toujours en route}
      Temps:=Temps+1;
      CompteurTemps1:=CompteurTemps1+1;
      LblTemps.Caption:='Chrono : '+IntToStr(Temps);
     
     {---------ChronoRappel--------}
     
      CompteurHeure:=0;
      FenetreMain.Temps1:=FenetreMain.CompteurTemps1;
      FenetreMain.LblSeconde.Caption:=''+IntToStr(FenetreMain.Temps1);
     
      {----Réinialisation des secondes}
      if FenetreMain.Temps1 = 60 then
        begin
          FenetreMain.CompteurTemps1:=0;
          FenetreMain.CompteurMinute:=FenetreMain.CompteurMinute+1;
          FenetreMain.LblMinute.Caption:=IntToStr(FenetreMain.CompteurMinute);
          {Réinialisation des minutes.}
          if FenetreMain.CompteurMinute=60 then
            begin
              FenetreMain.CompteurMinute:=0;
              FenetreMain.CompteurHeure:=FenetreMain.CompteurHeure+1;
              FenetreMain.LblHeure.Caption:=IntToStr(FenetreMain.CompteurHeure);
            end;
        end;
        end;
     
     
    end.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Ah aussi j'ai un autre problème
    le problème est que quand le chrono fonctionne j'ai les 60 qui apparais or je voudrais que après 59 sec il affiche 00 sec et non 60.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    C'est normal, tu affiches puis tu réinitialisé à 60 alors que tu devrais le faire à 59 (tu avais donc même un chrono avec 1s dans les dents)
    Et je ne comprends pas pourquoi tu persistes dans ton calcul manuel alors que tu peux le faire faiblement avec une comparaison entre une Date T et la Date Système
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Problème avec mon solde de tout compte
    Par amel972 dans le forum Paie
    Réponses: 1
    Dernier message: 12/08/2008, 14h38
  2. Problème avec mon compte yahoo
    Par acacia dans le forum Internet
    Réponses: 2
    Dernier message: 24/09/2007, 17h07
  3. Problème avec mon compte d'administrateur
    Par Ganak dans le forum Windows XP
    Réponses: 4
    Dernier message: 13/01/2007, 14h58
  4. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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