[delphi] utilisation du findComponent dans une fonction if?

utilisation du findComponent dans une fonction if? [delphi] - Delphi/Pascal - Programmation

Marsh Posté le 24-09-2003 à 16:15:42    

:hello:  
 
comment faire pour inserer une fonction findcomponent dans une IF ?
 
ce que je veux faire en gros c est une boucle de 0 a 14 (ca, ca va :D)
a l interieur de laquel il y a un IF qui reuni les condition suivante
trouver un composant (Tcheckbox) d un certain nom complementé d une variable I  
mais qu il ne selectionne que les boites qui sont cochés
 
ca fait 2plombe que je suis dessus et je sais pas (plus ) du tout quoi faire =)
 
j ai essayé (entre autre)
IF FindComponent (Format('checkbox%d', [i])) then  
(le pb c est ou mettre '.checked:=true' et que cela fonctionne :D
 
mici de m eclairer =)


---------------
Feedback      D.o.H  -  Seine Saint Denis  -  93
Reply

Marsh Posté le 24-09-2003 à 16:15:42   

Reply

Marsh Posté le 24-09-2003 à 16:24:40    

donne un bout de code stp

Reply

Marsh Posté le 24-09-2003 à 17:31:23    

Ouais poste ton code.  
Sinon tu mets le résultat de FindComponent dans une variable, ça te permet de faire plusieurs actions dessus et de tester si il l'a bien trouvé.
 
PS: FindComponent, dans la majorité des cas, c'est un peu crado hein :D T'as plutôt intérêt à faire un tableau de TCheckbox (rempli dans le OnCreate par exemple), ça évite de devoir se baser sur les noms et de devoir faire des recherches inutiles à chaque accès.


Message édité par antp le 24-09-2003 à 17:31:41

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 20:15:14    

antp a écrit :

PS: FindComponent, dans la majorité des cas, c'est un peu crado hein :D T'as plutôt intérêt à faire un tableau de TCheckbox (rempli dans le OnCreate par exemple), ça évite de devoir se baser sur les noms et de devoir faire des recherches inutiles à chaque accès.


 :whistle:  
tu devrais mettre ce paragraph en signature car je crois bien que ca fait la 3 eme fois que tu donnes cette astuce  [:ddr555]  
 
@++

Reply

Marsh Posté le 24-09-2003 à 20:32:05    

bah quoi, ça me fait mal au coeur de savoir tout ce que doit faire FindComponent à chaque appel :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 20:41:10    

bah en fait .. le code j en ai pas trop =)

procedure TMain.Button4Click(Sender: TObject);
var
  i: Integer;
begin
i:=0;
while (i<14) do
begin
 
IF checkbox0.Checked:=true then
s := idhttp1.Get(Format('http://blabla.com/bla.php?%s&%d', [id, i]));  // la 1ere variable est pas definie c est normal [:ddr555]
end;
 
IF checkbox1.Checked:=true then
begin
s := idhttp1.Get(Format('http://blabla.com/bla.php?%s&%d', [id, i]));  // la 1ere variable est pas definie c est normal [:ddr555]
end;
end;
 
....
 
IF checkbox13.Checked:=true then
begin
s := idhttp1.Get(Format('http://blabla.com/bla.php?%s&%d', [id, i]));  // (la 1ere variable est pas definie c est normal [:ddr555] il doit etre recuperer en fonction de I =)  )
end;
 
end;
end.
 


voila a quoi ca devrais ressembler sans la boucle :)
 
et avec bah a part ce que j ai mis plus haut je sais po =)
 

antp a écrit :


Sinon tu mets le résultat de FindComponent dans une variable, ça te permet de faire plusieurs actions dessus et de tester si il l'a bien trouvé.
 


lecompo := FindComponent (Format('checkbox%d', [i]));
 if [g]lecompo.checked:=true[/g] then
  begin
// le lien
end;
 
qq chose comme cha? mais ce qui a en gras je sais pas quoi mettre et comme c est ecrit ca marche pas :'(


 
PS: FindComponent, dans la majorité des cas, c'est un peu crado hein :D T'as plutôt intérêt à faire un tableau de TCheckbox (rempli dans le OnCreate par exemple), ça évite de devoir se baser sur les noms et de devoir faire des recherches inutiles à chaque accès.


 
pour ce que tu dis en second je sais pas si ce sera possible,  
en gros (ce que je comprend :D) c est creer une liste de tcheckbox dans la boucle et de lui donner ces caracteristiques apres? (comme l exemple qu il y a dans delphi ?
celui ci
 

procedure TForm1.Button1Click(Sender: TObject);
 
var
  i: Integer;
const
  NamePrefix = 'MyEdit';
begin
  for i := 1 to 20 do begin
    TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
    with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
    begin
      Left := 10;
      Top := i * 20;
      Parent := self;
    end;
  end;
end;


 
mon probleme c est que ce que je fait la c est plutot une autre etape de mon logiciel.
la 1ere est de ce connecter a un site de recuperer des données et de les dispacher dans mes ptit Tedit & Tcheckbox .. =)
donc en fait mes Tcheckbox ont deja des noms donc si je fait comme cha ca va m en remettre par dessus , nan?


---------------
Feedback      D.o.H  -  Seine Saint Denis  -  93
Reply

Marsh Posté le 24-09-2003 à 20:48:52    

En private dans les attributs de la Form :
FCheckboxes: array[0..9] of TCheckbox; // si 10 checkbox
 
Dans le OnCreate de la Form :
FCheckboxes[0] := Checkbox0;
FCheckboxes[1] := Checkbox1;
//etc. jusqu'à 9 (c'est lourd mais on ne le fait qu'une fois)
 
Ensuite quand tu dois accéder à une Checkbox tu fais FCheckboxes[i] simplement
Donc tu peux l'utiliser dans tes boucles, et en plus tu peux faire  
for i := Low(FCheckboxes) to High(FCheckboxes) pour ne pas devoir te soucier de la taille du tableau ;)
En plus ici tu n'est pas obligé de donner des noms numérotés à tes composants (bon ici ça change peut-être rien).
 
et ton " if lecompo.checked:=true then " qui marche pas c'est peut-être parce que tu fais une assignation au lieu d'une comparaison :p


Message édité par antp le 24-09-2003 à 20:49:09

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 21:13:49    


c est ou le on creat de la form  :heink: ??
 
sinon pour le if " if lecompo.checked:=true then"  
le pb viens du fait qu il me dise que "checked" c est un composant non identifié :-/
 


---------------
Feedback      D.o.H  -  Seine Saint Denis  -  93
Reply

Marsh Posté le 24-09-2003 à 21:24:17    

si lecompo était du type TCheckbox ça serait peut-être mieux alors... mais je pouvais pas deviner de quel type il était dans ton code :p
 
le OnCreate de la Form il est dans les Events, comme tous les autres events. Ou alors tu cliques 2x dans le fond de la Form, ça marche aussi (à moins que t'aies un panel dans le fond ou un truc du genre, évidemment).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 22:03:15    

cha marche =)
 
tiens tant qui a ce sujet comment on fait une pause dans une boucle?
 
j avais deja essayé y a longtemps en utilisant..  
heu c etait sleep() je crois mais sa mettait tout le prog en pause
:-/


---------------
Feedback      D.o.H  -  Seine Saint Denis  -  93
Reply

Marsh Posté le 24-09-2003 à 22:03:15   

Reply

Marsh Posté le 24-09-2003 à 22:07:40    

Si tu attends un événement :
 
while Paused do
  Application.HandleMessage();
 
Paused est pas exemple un booléen
 
Sinon bah ça dépend ce que tu veux, c'est pas assez précis ta question :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 22:13:33    

=)
 
bah en fait je voudrai faire une pause de qq secondes entre chaque requette au serveur ,
car si j en fait trop (trop vite) le serveur bloque le compte pour 20minutes =)


---------------
Feedback      D.o.H  -  Seine Saint Denis  -  93
Reply

Marsh Posté le 24-09-2003 à 22:24:41    

ha ok
bah essaie ça :
 
for i := 0 to 50 do
begin
 Sleep(100);
 Application.HandleMessage;
end;
 
y a peut-être plus propre comme méthode mais bon


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 22:32:59    

oki merchi ^^
 
j essayerai cha demain :) car faut que j aille pioncer demain matin dst de meca [:ddr555]


---------------
Feedback      D.o.H  -  Seine Saint Denis  -  93
Reply

Marsh Posté le 25-09-2003 à 11:44:22    

antp a écrit :

bah quoi, ça me fait mal au coeur de savoir tout ce que doit faire FindComponent à chaque appel :D


d ou mon post  [:rofl]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed