cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 2011
-
6 déc. 2007 à 16:09
cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDerniè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;
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
Oniria
Messages postés292Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention18 décembre 20143 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.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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;
cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 20111 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.