LeDOC666
Messages postés4Date d'inscriptionvendredi 5 septembre 2003StatutMembreDernière intervention16 mars 2007
-
6 mars 2007 à 11:38
LeDOC666
Messages postés4Date d'inscriptionvendredi 5 septembre 2003StatutMembreDernière intervention16 mars 2007
-
16 mars 2007 à 15:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
LeDOC666
Messages postés4Date d'inscriptionvendredi 5 septembre 2003StatutMembreDernière intervention16 mars 2007 16 mars 2007 à 15:47
Q - For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg+1] is TButton ) then //Tu avais oublié le "+1"
R - En fait je ne l'avait pas oublié, mais dans le code original que tu m'avai donné, il y etait pas :)
Q - TButton(Form1.Components[msg]).Click; // Paramètres en trop : voir message de l'IDE//
R - C'est justement la que ca coince :/
Q - Dernier beug que je te laisse solutionner ^^ :si tu fais cela tu vas appeler le bouton qui lance cette boucle : ainsi tu auras une boucle infinie. Il faut donc que tu rajoute une condition en plus.
R - la condition était si j = 1
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 9 mars 2007 à 23:29
@ LeDOC666 :
Pour cliquer les Buttons de 1 à 10, je te conseille d'essayer plutôt ceci :
var i: Integer;
begin
for i := 1 to 10 do
TButton(FindComponent(Format('Button%d', [i]))).Click;
end;
Ca t'évitera toute complication, étant donné qu'il y a d'autres boutons sur la fiche, et d'avoir à jouer sur les Button.Tag et Button.Name.
Bonne prog' :p
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 8 mars 2007 à 11:12
Salut : tu as trois erreurs dans ton code.
For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg+1] is TButton ) then //Tu avais oublié le "+1"
TButton(Form1.Components[msg]).Click; // Paramètres en trop : voir message de l'IDE//
Dernier beug que je te laisse solutionner ^^ :si tu fais cela tu vas appeler le bouton qui lance cette boucle : ainsi tu auras une boucle infinie. Il faut donc que tu rajoute une condition en plus.
@+
LeDOC666
Messages postés4Date d'inscriptionvendredi 5 septembre 2003StatutMembreDernière intervention16 mars 2007 7 mars 2007 à 11:27
J'aai fait quelques modifications sur le zip, et sur l'optimisation du code.
Par contre j'arrive pas a simplifier la partie:
par For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg] is TButton ) then
TButton(Form1.Components[msg]).Click(Sender); // C'est la que ca coince :/
lgrfranck
Messages postés3Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention 7 mars 2007 7 mars 2007 à 06:25
Bonjours , j'ai ecris un progamme pour aider a la création d'un fichier ZIP pour la parrution
d' une source "DPZ CRÉATION D'UN FICHIER ZIP DE VOTRE PROJET"
nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 octobre 2011 6 mars 2007 à 15:50
je confirme ce que francky a dit absolument !
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 6 mars 2007 à 13:47
Salut,
Je vais être assez critique : désolé.
*Fichiers inutiles présents et zip mal fait.
*Déjà aucun composants n'est convenablement nommé ce qui fait qu'on a du mal à s'y retrouver.
*Ensuite ton code est trop long et non optimisé. Par exemple
1)If s[1] = 0 then
begin
s[1] := 1;
Button1.Caption := 'Stop';
Button11.Enabled := False;
Edit1.Enabled := False;
Button24.Enabled := True
end
else if s[1] = 1 then
begin
s[1] := 0;
Button1.Caption := 'Start';
Button11.Enabled := True;
end;
Ect ect : tu aurais pu utiliser des case of. Ensuite il y a des cas similaires qui pouraient être regroupés dans des procédures.
For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg] is TLabel ) then
TLabel(Form1.Components[msg]).Caption:=FormatDateTime('hh:mm:ss',hour[msg]);
Pour conclure : il y a un gros beug dans ton application. Le timer est activé "au niveau du composant". Ce qui fait que l'instruction MessageDlg('Compteur ' + inttostr(msg) + ' terminé',mtConfirmation,mbOKCancel,0); est toujours appelé. De ce fait ton application ne fonctionne tout simplement pas.
Il y a du boulot à faire mais ne te décourage pas ;).
LeDOC666
Messages postés4Date d'inscriptionvendredi 5 septembre 2003StatutMembreDernière intervention16 mars 2007 6 mars 2007 à 11:38
Pour activer le compte a rebours, cochez la case correspondante au compte a rebours que vous souhaitez initialiser.
16 mars 2007 à 15:47
If (Form1.Components[msg+1] is TButton ) then //Tu avais oublié le "+1"
R - En fait je ne l'avait pas oublié, mais dans le code original que tu m'avai donné, il y etait pas :)
Q - TButton(Form1.Components[msg]).Click; // Paramètres en trop : voir message de l'IDE//
R - C'est justement la que ca coince :/
Q - Dernier beug que je te laisse solutionner ^^ :si tu fais cela tu vas appeler le bouton qui lance cette boucle : ainsi tu auras une boucle infinie. Il faut donc que tu rajoute une condition en plus.
R - la condition était si j = 1
9 mars 2007 à 23:29
Pour cliquer les Buttons de 1 à 10, je te conseille d'essayer plutôt ceci :
var i: Integer;
begin
for i := 1 to 10 do
TButton(FindComponent(Format('Button%d', [i]))).Click;
end;
Ca t'évitera toute complication, étant donné qu'il y a d'autres boutons sur la fiche, et d'avoir à jouer sur les Button.Tag et Button.Name.
Bonne prog' :p
8 mars 2007 à 11:12
For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg+1] is TButton ) then //Tu avais oublié le "+1"
TButton(Form1.Components[msg]).Click; // Paramètres en trop : voir message de l'IDE//
Dernier beug que je te laisse solutionner ^^ :si tu fais cela tu vas appeler le bouton qui lance cette boucle : ainsi tu auras une boucle infinie. Il faut donc que tu rajoute une condition en plus.
@+
7 mars 2007 à 11:27
Par contre j'arrive pas a simplifier la partie:
Button1Click(Sender);
Button2Click(Sender);
Button3Click(Sender);
Button4Click(Sender);
Button5Click(Sender);
Button6Click(Sender);
Button7Click(Sender);
Button8Click(Sender);
Button9Click(Sender);
Button10Click(Sender);
par For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg] is TButton ) then
TButton(Form1.Components[msg]).Click(Sender); // C'est la que ca coince :/
7 mars 2007 à 06:25
d' une source "DPZ CRÉATION D'UN FICHIER ZIP DE VOTRE PROJET"
6 mars 2007 à 15:50
6 mars 2007 à 13:47
Je vais être assez critique : désolé.
*Fichiers inutiles présents et zip mal fait.
*Déjà aucun composants n'est convenablement nommé ce qui fait qu'on a du mal à s'y retrouver.
*Ensuite ton code est trop long et non optimisé. Par exemple
1)If s[1] = 0 then
begin
s[1] := 1;
Button1.Caption := 'Stop';
Button11.Enabled := False;
Edit1.Enabled := False;
Button24.Enabled := True
end
else if s[1] = 1 then
begin
s[1] := 0;
Button1.Caption := 'Start';
Button11.Enabled := True;
end;
Ect ect : tu aurais pu utiliser des case of. Ensuite il y a des cas similaires qui pouraient être regroupés dans des procédures.
2)Ensuite
Label1.Caption := FormatDateTime('hh:mm:ss',hour[1]);
Label2.Caption := FormatDateTime('hh:mm:ss',hour[2]);
Label3.Caption := FormatDateTime('hh:mm:ss',hour[3]);
Label4.Caption := FormatDateTime('hh:mm:ss',hour[4]);
Label5.Caption := FormatDateTime('hh:mm:ss',hour[5]);
Label6.Caption := FormatDateTime('hh:mm:ss',hour[6]);
Label7.Caption := FormatDateTime('hh:mm:ss',hour[7]);
Label8.Caption := FormatDateTime('hh:mm:ss',hour[8]);
Label9.Caption := FormatDateTime('hh:mm:ss',hour[9]);
Label10.Caption := FormatDateTime('hh:mm:ss',hour[10]);
A remplacer par
For msg:=0 to Form1.ComponentCount-1 do
If (Form1.Components[msg] is TLabel ) then
TLabel(Form1.Components[msg]).Caption:=FormatDateTime('hh:mm:ss',hour[msg]);
On aurait pu faire de meme avec
Button1Click(Sender);
Button2Click(Sender);
Button3Click(Sender);
Button4Click(Sender);
Button5Click(Sender);
Button6Click(Sender);
Button7Click(Sender);
Button8Click(Sender);
Button9Click(Sender);
Button10Click(Sender);
CheckBox1.Checked := False;
CheckBox2.Checked := False;
CheckBox3.Checked := False;
CheckBox4.Checked := False;
CheckBox5.Checked := False;
CheckBox6.Checked := False;
CheckBox7.Checked := False;
CheckBox8.Checked := False;
CheckBox9.Checked := False;
CheckBox10.Checked := False;
Pour conclure : il y a un gros beug dans ton application. Le timer est activé "au niveau du composant". Ce qui fait que l'instruction MessageDlg('Compteur ' + inttostr(msg) + ' terminé',mtConfirmation,mbOKCancel,0); est toujours appelé. De ce fait ton application ne fonctionne tout simplement pas.
Il y a du boulot à faire mais ne te décourage pas ;).
6 mars 2007 à 11:38