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

Composants VCL Delphi Discussion :

Redémarrer le compteur du Timer


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 49
    Points
    49
    Par défaut Redémarrer le compteur du Timer
    Bonjour

    J'utilise un composant Timer, y-a-t-il un moyen de réinitialiser le compteur du Timer à 0 lorsque je touche sur un bouton? Si j'ai Timer.Intervalle:=1000(1s) d'où toute les secondes je entre dans ce Timer, mais je touche sur un bouton j'aimerai redémarrer ce compteur Timer à 0. Ainsi je retarde de 1s de plus si je touche sur ce bouton.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    si ton bouton arrête le timer puis le relance (en jouant sur TTimer.Enabled), il repartira de zéro
    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 chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    dans le code du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Timer.enabled := False;
    Timer.enabled := True;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  4. #4
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    Bonjour,

    J'ai un problème avec la ré initialisation du Timer. Mon but et de faire des sauvegarde à intervalle régulier, pour cela j'ai une boucle infini avec un Timer :
    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
     
    procedure TThreadSauvegarde.TimerAction(Sender: TObject);
    var
      sErreur  : String;
     
    begin
    while not Terminated do 
      try
        MyTimer.Enabled := False;
     
        // Chargement des options
        sErreur := ChargerOption;
     
        // Sauvegardes si les options ont bien été chargées
        // et qu'une sauvegarde est planifiée
        if (sErreur = '')
            and TesterSauvegardePlanifiee then
        begin
          Sauvegarde;
        end;
     
        Sleep(5000);
     
        MyTimer.Enabled := True; 
      except
        MyTimer.Enabled := True;
        Exit;
      end;
    J'ai bien sur préalablement initialiser le Timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TThreadSauvegarde.Execute;
    begin
      MyTimer.Interval  := 5000;
      MyTimer.OnTimer   := TimerAction;
      MyTimer.Enabled   := True;
    end;
    Mon problème est que je suis obliger de mettre un Sleep(5000) pour espacer mes sauvegarde de 5 seconde, si je ne le met pas, le Timer ne se réinitialise pas, et sauvegarde en permanence, je ne comprend pas pourquoi?

  5. #5
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Heu, à quoi sert le timer dans ton exemple ?

    Tu utilise déjà un thread. Le timer ne sert à rien. Il suffit de faire un sleep de 5s, d'effectuer la sauvegarde et de boucler !

    Par contre, je structurerais plutôt le code de la façon suivante :

    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
     
    procedure TThreadSauvegarde.TimerAction(Sender: TObject);
    var
      sErreur  : String;
     
    begin
        // Chargement des options
        sErreur := ChargerOption;
     
        // Sauvegardes si les options ont bien été chargées
        // et qu'une sauvegarde est planifiée
        if (sErreur = '')
            and TesterSauvegardePlanifiee then
        begin
          Sauvegarde;
        end;
    end;
     
    procedure TThreadSauvegarde.Execute;
    begin
      while not Terminated do
      begin
        Sleep(5000);
        TimerAction(self);
      end;
    end;
    Si tu veux utiliser le Timer, c'est le thread qui ne sert à rien.

  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    C'est une erreur de compréhension des threads.
    (Je te conseille de revoir les tutorials sur les threads, sur la méthode execute)

    Sur le principe tu n'as pas vraiment besoin de timer.
    (Les cas où l'on doive mettre un timer dans un thread, je pense, doivent être assez rare)

    Je ferais plutôt de cette façon (la sauvegarde se fait toutes les 5 secondes, avec une erreur de temps correspondant au temps d'exécution du code autre que le sleep).

    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
     
    procedure TThreadSauvegarde.Execute;
    while not Terminated do 
      try
        // Chargement des options
        sErreur := ChargerOption;
     
        // Sauvegardes si les options ont bien été chargées
        // et qu'une sauvegarde est planifiée
        if (sErreur = '')
            and TesterSauvegardePlanifiee then
        begin
          Sauvegarde;
        end;
     
        Sleep(5000);
      except
    // Pas de gestion d'exception
      end;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  7. #7
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    Ok, je pensait bien que le Timer était inutile, merci de la confirmation!

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

Discussions similaires

  1. Timer / compteur
    Par Dean59 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/05/2009, 18h10
  2. Timer/Compteur/où est le bug ?
    Par DURVILLE dans le forum Langage
    Réponses: 4
    Dernier message: 17/04/2008, 10h33
  3. Problème de compteur dans un timer
    Par mcspawn dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/12/2007, 19h23
  4. timer d'un pic utilisé comme compteur
    Par jmdfaye dans le forum C
    Réponses: 5
    Dernier message: 27/03/2007, 14h41
  5. timer et compteur !
    Par gsmdu62 dans le forum Delphi
    Réponses: 2
    Dernier message: 22/06/2006, 09h45

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