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 :

Timer1 : afficher Shape1 avec differents intervalles


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Timer1 : afficher Shape1 avec differents intervalles
    Bonjour,
    Je vous remercie si qq1 peut m'expliquer ceci :
    J'ai un Form1 et dessus Shape1. Ma question est : comment afficher Shape1 4 fois, interval de 1 sec, + 1 fois 2 sec + 5 sec de pause, puis ça recommence.
    Donc, comme un clignotant, mais avec des différents longueurs de intervals.
    Merci beaucoup pour toute suggestion ;-)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Simplement avec la procédure OnTimer et la propriété Interval (en milliseconde).

    Dans l’événement OnTimer tu le désactive avec Enabled := False, tu fais ton traitement, tu changes l'interval et tu l'actives avec Enabled := True

  3. #3
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    quelque chose comme:
    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
    var
      aCount: Integer = 0;
      Paused: Boolean = False;
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not Paused then
        Shape1.Visible := not Shape1.Visible
      else
        Shape1.Visible := False;
      Inc(aCount);
      if aCount = 8 then
      begin
        Timer1.Interval := 2000;
        Shape1.Visible := True;
      end;
      if aCount = 9 then
      begin
        Timer1.Interval := 5000;
        Paused := True;
      end;
      if aCount = 10 then
      begin
        Timer1.Interval := 1000;
        aCount := 0;
        Shape1.Visible := True;
        Paused := False;
      end;
    end;
    ps: le TShape est visible au début de l'action

    avec le TShape non visible il faut modifier légèrement:
    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
    var
      aCount: Integer = 0;
      Paused: Boolean = False;
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not Paused then
        Shape1.Visible := not Shape1.Visible
      else
        Shape1.Visible := False;
      Inc(aCount);
      if aCount = 9 then
      begin
        Timer1.Interval := 2000;
        Shape1.Visible := True;
      end;
      if aCount = 10 then
      begin
        Timer1.Interval := 5000;
        Paused := True;
      end;
      if aCount = 11 then
      begin
        Timer1.Interval := 1000;
        aCount := 0;
        Paused := False;
      end;
    end;
    si ça peut aider
    Cordialement,
    @+

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    Ou en jouant avec un tableau et le Tag du timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    uses Math;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    const
      Intervals : array[0..9] of integer = (1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 2000, 5000);
     
    begin
      Shape1.Visible := not Shape1.Visible;
     
      Timer1.Interval := Intervals[Timer1.Tag];
      Timer1.Tag      := IfThen(Timer1.Tag < high(Intervals), Timer1.Tag +1);
    end;

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Merciiiii !!!
    Merci beaucoup pour vos réponses, cette tactique avec "inc" est super ! Actuellement au travail, je testerai ce soir et je mettrai "résolu" si ça marche ;-)
    Bonne journée !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Encore plus simple :-)
    La solution de Andnotor me semble encore plus simple... mais en réalité plus difficile à comprendre :-)
    Impatient de éssayer...

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 196
    Points : 41 428
    Points
    41 428
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Citation Envoyé par Andnotor Voir le message
    Ou en jouant avec un tableau et le Tag du timer :
    Très élégant mais il ne manquerait pas une réinitialisation de calcul du Tag afin de faire une boucle infinie ? (la partie IfThen)
    (pas le courage de tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Timer1.Tag:=IfThen(Timer1.Tag < high(Intervals), Timer1.Tag +1,low(Intervals));

  8. #8
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    Bonjour,

    Par curiosité, j'ai testé la solution de AndnotOr, mais mon D7 ne trouve pas l'instruction IfThen. J'ai donc modifié et aussi remis tag à 0 pour boucler sur l'animation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Timer1Timer(Sender: TObject);
    Const
      Intervals : array[0..9] of integer = (1000, 500, 1000, 500, 1000, 600, 1000, 500, 800, 500);
    Begin
      Panel1.Visible := not Panel1.Visible;
      Label1.Caption := 'Tag : '+ IntToStr( Timer1.Tag)+ ' - Interval : '+IntToStr(Intervals[Timer1.Tag]) ;
      Timer1.Interval := Intervals[Timer1.Tag];
      If (Timer1.Tag < high(Intervals)) Then Timer1.Tag := Timer1.Tag  +1
                                        Else Timer1.Tag := 0 ;
    End ;
    ça marche parfaitement et pour voir j'ai affiché l'intervalle dans Label1

    A+
    Charly

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    IfThen est dans l'unité Math. Je ne sais pas si elle existait déjà sous D7. Sinon, if..then..else va très bien.
    Le deuxième paramètre (si FALSE) a 0 comme valeur par défaut, inutile de le renseigner (à moins bien sûr que le tableau ne soit pas à base 0)

  10. #10
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 073
    Points
    1 073
    Par défaut
    Alors oui,
    plus court, plus élégant et peut être plus compliqué à comprendre au premier abord

    Bravo bel exemple d'optimisation esthétique

    sinon IfThen est bel et bien présent dans l'unité Math sous D7 !

    Cordialement,
    @+

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    Effectivement, IfThen est dans l'unité MathStrUtils. Mon Help ne me le trouvait pas ! et je ne connaissais pas ...
    A+
    Charly

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Merciiii...!
    Effectivement, LA solution qui marche parfaitement est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uses Math;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    const
      Intervals : array[0..9] of integer = (1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 2000, 5000);
     
    begin
      Shape1.Visible := not Shape1.Visible;
     
      Timer1.Interval := Intervals[Timer1.Tag];
     // Timer1.Tag      := IfThen(Timer1.Tag < high(Intervals), Timer1.Tag +1);
    Timer1.Tag:=IfThen(Timer1.Tag < high(Intervals), Timer1.Tag +1,low(Intervals));
    Merci beaucoup à tous !

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

Discussions similaires

  1. Creer un colorbar avec des intervalles differents
    Par Nuestracr dans le forum MATLAB
    Réponses: 3
    Dernier message: 09/03/2009, 17h26
  2. Réponses: 1
    Dernier message: 05/01/2006, 19h43
  3. [struts][]taglib bean] afficher html avec write
    Par mlequim dans le forum Struts 1
    Réponses: 6
    Dernier message: 04/11/2005, 18h44
  4. [Javascript] Afficher du texte avec des intervalles
    Par Invité4 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/01/2005, 21h29
  5. afficher texte avec retour chariot aprèq requète sql
    Par frenchy371 dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 17h33

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