Timer Boucle infinie

cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 6 déc. 2007 à 16:09
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 10 déc. 2007 à 15:09
Bonjour Les Copains,

  Voilà je suis coincé face à un truc tout bete mais je n'arrive pas a voir pourquoi j'ai une boucle infinie.

Mon code est tout simple un Tedit.text
tant que l'utilisateur tape son texte et valide (touche enter) dans un délais < 3 s
cela enregistre dans un fichier
si le déla est > 3 s alors nous sortons du fichier et nous en recréons un autre

le code donne ceci
Var
 Form1: TForm1;
 lig,ligne,numero ,CH, TEMPS, HEURE,expediteur,produit:STRING;
  ANC_ext,fichiers:TSearchRec;
  F, nouveau : textfile;
  magasins,R,i,j,test,N: integer;
  magasin : array [1..155,1..3] of string;
  prod: array [1..11] of string = ('109','112','121','247','350','505','509','510','535','618','634');
  cars : TStringList;
  topd: ttime;

procedure TForm1.Edit1KeyPress(Sender: TObject; var key : char);
begin
 if key =#13 then
 begin
 topd:=now;
 lig:= edit1.text ;
   numero:= copy(lig,2,3);
  
   expediteur:='720122';
   produit :='KSY';
   for i:= 1 to 11
   do

   begin
   if Prod[i] = numero
   THEN
PRODUIT:='KM1'
    end;
 
    ex:= ex+ produit+ lig;

   timer1.Interval:= 3000;

    lig:= exp ;
 datetimetostring(temps,'HHNNSSZZZ',now);
 assignfile(nouveau,'c:\noel\sernam'+temps+'.txt');

   rewrite(nouveau);
   append(nouveau);
   while (topd +now)<timer1.Interval do

 writeln(nouveau,lig) ;

 closefile(nouveau);
  edit1.Clear;

j'ai mis ce qui je pense pose problème en gras
cela m'écris plusieurs petits fichiers avec rien dedans
que pensez vous de ma boucle avec le while (topd + now)?
comment aurez vous ecris à ma place s'il vous plait.
Je vous remercie d'avance, je continue à chercher de mon coté.
couf

8 réponses

tilab Messages postés 95 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 26 octobre 2009 4
6 déc. 2007 à 16:28
Salut,

ton code n'est pas juste

ex:= ex+ produit+ lig;    ex pas définit
lig:= exp ; provoque une erreur
manque la fonction du timer

Alex
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
6 déc. 2007 à 16:29
Ok
mon erreur est bien là ou je pense
mais alors comment faire pour comparer
timer1.interval
et topd now qui sont du type ttime
couf
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
6 déc. 2007 à 16:31
Salut
tilab non j'ai vu cela et corrigé déja merci
mais ce n'est pas là je crois plus que mes délais ne sont pas bons

couf
0
tilab Messages postés 95 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 26 octobre 2009 4
6 déc. 2007 à 16:43
Pour rependre ton problème:

la partie écriture du fichier doit être faite dans l'event du timer

chaque fois que tu exécute une opération sur l'edit tu désactives et actives le timer

Alex
0

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

Posez votre question
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
6 déc. 2007 à 19:25
RE

je vois ce que tu veux dire

j'essaye .
entretemps j'ai essayé avec SecondsBetween  mais là c' quasi impossible.

couf
0
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
8 déc. 2007 à 08:33
Bonjour,

Pourquoi utiliser un TTimer pour compter. En effet si dans le OnCreate de la fiche tu ajoute une variable Tps_Référence:=Now (Tps référence étant un TTime), puis lorsque l'utilisateur appui sur une touche, tu compare Tps_Référence avec Now et si le temps entre les deux est > à 3 secondes, tu créé ton fichier; puis tu initialise Tps_Référence avec Now à nouveau... et ainsi de suite... ca marcherais et en plus, c'est simple.

Oniria
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
8 déc. 2007 à 12:02
Salut,

Ne t'em... pas avec un Timer.
J'ai une solution plus simple basée sur l'utilisation de GetTickCount.
Ca fonctionne parfaitement, à toi d'ajouter la garniture.
J'ai modifié le chemin du fichier pour vérif.
Bref, tu peux tester toi-même ce bout de code avant de l'adopter.

var
  PathAppli: string;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  Temps: string;
  TopD: DWORD;
  Lig: string;
  Nouveau: TextFile;
  SaisieEnCours: Boolean;
begin
  if not SaisieEnCours then
  begin
      SaisieEnCours := True;
      TopD := GetTickCount;
  end
  else
  if Key = #13 then
  begin
    // ...
    Lig := Edit1.Text;
    DateTimeToString(Temps, 'HHNNSSZZZ', Now);
    AssignFile(Nouveau, PathAppli + Temps + '.txt');
    Rewrite(Nouveau);
    if (GetTickCount - TopD) > 3000 then
      Append(Nouveau)
    else
      Rewrite(Nouveau);
    Writeln(Nouveau, Lig);
    CloseFile(Nouveau);
    Edit1.Clear;
    SaisieEnCours := False;
  end;
end;

A pluche.
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
10 déc. 2007 à 15:09
Salut Japee

J'ai essayé ce que tu m'as donné, bin lorsque
je saisie 2 mots de suite en moins de 3s il me crèe 2 fichiers. Distincts mais après 3s
au lieu de mettre les 2 mots dans le même fichiers.

couf
0
Rejoignez-nous