Un label: Comment arrêter son clignotement infini

Résolu
Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015 - 18 juin 2008 à 01:33
 Utilisateur anonyme - 20 juin 2008 à 18:22
Salut!

Ma question est basée sur un mecanisme de "temps donné".
J'utilise trois composants simples un Timer1, un Tbutton1 et Label1.
Dans la propriété "Interval" de mon Mon Timer1,  je mets une vitesse de 250. Et j'écrits cette ligne de code dans l'événement "OnTimer": Label1.visible:= not label1.visible;
Et alors dans l'événement OnClick de mon Tbutton1, je mets ces codes d'enregistrements après lequels je veux demander d'afficher le mot "attention..." qui est le "caption" dans mon Label1. Et ce dernier clignotera à une vitesse de 250 comme mentionné ci-haut.

AdoTable1.Append;
AdoATble1.FieldByName('Nom').assTring;
AdoTable1.Post;
Label1.Caption:=  Label1.Caption; //Juste là, ça marche!

Mais alors, ma préoccupation est de voir ce Label1 arrêtait son clignotement juste après 3 secondes.
Sans ça, il ne pourra pas s'arrêter...son clignotement sera infinini. Comment faire?Developper est une dimension
pour moi.

Leader2000
A voir également:

6 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
18 juin 2008 à 02:41
var
  TimerDelta : cardinal = 0; // nombre de declanchement de OnTimer
  TimerSecRun: cardinal = 0; // nombre de secondes ecoulées

(...)
Label1.Tag := TimerSecRun + 3; // secondes ecoulées + 3 secondes
(...)

procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
  inc(TimerDelta);
  TimerSecRun := round(TimerDelta * (Sender as TTimer).Interval * 0.001);

  if Label1.Tag >= TimerSecRun then // clignote pendant 3 secondes
    Label1.visible := not Label1.visible;
end;






3
Utilisateur anonyme
20 juin 2008 à 16:52
Jenny (tu vois je suis cool j'ai finis mon taff et plutot que de rentrer je te répond ) : la question n'est pas de savoir si mes remarques sont gentilles ou pas.
Je préfere donner un bon coup de pompes aux fesses de quelqu'un et de le reveiller, plutot que de me dire "Bon allez je lui file : il est trop bete pour réflechir".

Je dirais en substance : Un forum est là pour aider : Cependant ca ne dispense en rien ni de chercher ni de réflechir. Certains ont tendance à l'oublier .

Par exemple là :

procedure TForm1.Button1Click(Sender: TObject);
  var TimerDelta,TimerSecRun  : cardinal;
begin
  Label1.Tag := TimerSecRun + 3; // secondes ecoulées + 3 secondes
end;
procedure TForm1.Timer1Timer(Sender: TObject);
  var TimerDelta,TimerSecRun  : cardinal;
begin
  inc(TimerDelta);
  TimerSecRun := round(TimerDelta * (Sender as TTimer).Interval * 0.001);
  if Label1.Tag >= TimerSecRun then // clignote pendant 3 secondes
  Label1.visible := not Label1.visible;
end;

Premiere chose qui me choque : tu vérifie en continue la valeur du Tag ( if Label1.Tag ) mais à quel moment la valeur du Tag change ? Jamais (si si regarde bien). A aucun moment dans le onTimer tu refais Label1.Tag:=TimerSecRun;

Allez on va pas passer 3 ans la dedans : voici la solution

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Tag:=0; 
  Timer1.Interval:=100; 
  Timer1.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Tag:=Label1.Tag+Timer1.Interval;
  If Label1.Tag<3000 Then Label1.visible := not Label1.visible
Else  Label1.visible:=False;
end;

Seconde chose qui me choque : on a le sentiment que tu codes des choses sans meme les comprendre.

Pour finir ma remarque n'a rien de méchante : Mais bon hormis que ca saoule de redire 50 000 fois la meme chose, il faut arreter de passer sa journée sur le net afin d'obtenir du tout cuit. Si tout le monde attendait que le copain fasse un machin, on en serait encore à l'homme de la préhistoire . Donc de temps on lache son pc, on prend son stylo, on prend son papier, on se met la tete entre les mains et on réfléchit . Si tu ne fais pas ca, tu ne progresseras jamais.

La preuve Jenny : ca fait 1 an et demi que tu es ici. Et apres 1 an et demi de developpement intensif, tu en es toujours au meme stade (Proche de la nullité : désolé le but n'est pas de te blesser). Tout ca parce que tu t'es jamais donné la peine d'essayer de comprendre la moindre chose. Je trouve plutot cela triste/dommage pour toi .

Moi ce que je supporte pas (et je finirais la dessus) : c'est que moi je m'éfforce à ne pas polluer le forum quitte a parfois en baver sacrément (en passant des semaines et des semaines sur un truc con), alors que d'autres en ont rien à sécouer et pollue constamment.
3
jackalunion Messages postés 128 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 14 juillet 2008
18 juin 2008 à 03:24
F0XI , merci beaucoup car j'avais un broblème du même type .
  Vous m'avez eclairer avec votre exemple
0
Utilisateur anonyme
18 juin 2008 à 08:57
P'tain : t'as combien de pseudo toi ? Entre Leader2000, New2000,Old2000,Crazy2000,Biloute2000,Bird2000,Quake2000,Slupp2000.



Faudrait peut etre arrété là Jenny .



Bon puis les questions pourraves, faudrait aussi arreter . On a un cerveau faudrait pas hésiter à l'utiliser de temps en temps. Promis ca fait pas mal

Pourquoi je dis ca : Car avec un minimum de réflexion, on trouve une solution.

1)On crée une variable globale :
Temps:Cardinal;

2)On initialiser dans le TButton Temps à zéro
Temps:=0;

3)A chaque appel du OnTimer, on ajoute à Temps, le temps écoulé
Temps:=Temps+Timer1.Interval;

Timer1.Interval : C'est le temps écoulé

4)On regarde la valeur de temps, si temps est supérieur à 3s (3000ms) on rend le label invisible :

If Temps>3000 Then Label1.Visible:=False;

C'est quand meme pas d'un niveau d'intélligence extraordinaire si ?
Faut arréter le réflexe "Forum", et abuser de son cerveau.

La réflexion / intélligence ce n'est pas que innée : ca se cultive aussi
0

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

Posez votre question
Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015
20 juin 2008 à 14:21
Salut Foxi,
Merci pour tes codes.
Voilà ce que je fais mais le clignotement continue toujours sans s'arrêter après 3 secondes comme prévu.


procedure TForm1.Button1Click(Sender: TObject);
  var TimerDelta,TimerSecRun  : cardinal;
begin
  Label1.Tag := TimerSecRun + 3; // secondes ecoulées + 3 secondes
end;
procedure TForm1.Timer1Timer(Sender: TObject);
  var TimerDelta,TimerSecRun  : cardinal;
begin
  inc(TimerDelta);
  TimerSecRun := round(TimerDelta * (Sender as TTimer).Interval * 0.001);
  if Label1.Tag >= TimerSecRun then // clignote pendant 3 secondes
  Label1.visible := not Label1.visible;
end;




N.B. Merci aussi à Franky pour ces gentils remarques.

Developper est une dimension pour moi.
Leader2000
0
Utilisateur anonyme
20 juin 2008 à 18:22
Pour finir : ta question était tout simplement "comment faire un chronomètre". Je pense qu'une personne qui code depuis 1 an et demi, devrait avoir dépasser ce  stade là...

Je pense qu'une telle question "comment faire un chronomètre" contribue grandement à la pollution de ce site.

Pour finir : Que tu ai 1 ou 10 pseudos ..... en définitif je m'en fous .
Par contre si tu étais le webmaster de ce site, je pense que ca te ferait mal de voir tes stats flouder    .... a cause de ce genre de chose .
Cependant je comprend tres bien, que c'est un moyen efficace de flooder sans se faire repérer (Ne voyant pas d'autres utilités à la chose ) ....
0
Rejoignez-nous