[Delphi5] Boucle et contrôle (titre~?)

Boucle et contrôle (titre~?) [Delphi5] - Programmation

Marsh Posté le 14-05-2001 à 14:15:19    

La situatiuon :=>>
un fiche + 10 case à cocher (checkbox :) ), leur nom est du type ccAdrX où X represente un nombre (ccAdr1, ccAdr2 etc...)
un tableau du style tabAdr : ARRAY [1..9] OF STRING;
J'ai fait ça :
...
ccAdr1.Caption:=tabAdr[1];
ccAdr2.Caption:=tabAdr[2];
ccAdr3.Caption:=tabAdr[3];
ccAdr4.Caption:=tabAdr[4];
ccAdr5.Caption:=tabAdr[5];
...
 
Et bien figurer vous que je suis sûr qu'on peut faire ça avec une boucle...mais comment ?
For i:=1 TO 9 DO
  ccAdr[#0000fa]?i?[#0000fa].caption:=tabAdr[i]
END;
 
Voili :sweat:


---------------
ma vie, ma carrière! - Un trait d’union entre des photos et des mots.
Reply

Marsh Posté le 14-05-2001 à 14:15:19   

Reply

Marsh Posté le 14-05-2001 à 14:16:09    

AGA a écrit a écrit :

La situatiuon :=>>
un fiche + 10 case à cocher (checkbox :) ), leur nom est du type ccAdrX où X represente un nombre (ccAdr1, ccAdr2 etc...)
un tableau du style tabAdr : ARRAY [1..9] OF STRING;
J'ai fait ça :
...
ccAdr1.Caption:=tabAdr[1];
ccAdr2.Caption:=tabAdr[2];
ccAdr3.Caption:=tabAdr[3];
ccAdr4.Caption:=tabAdr[4];
ccAdr5.Caption:=tabAdr[5];
...
 
Et bien figurer vous que je suis sûr qu'on peut faire ça avec une boucle...mais comment ?
For i:=1 TO 9 DO
  ccAdr?i?.caption:=tabAdr[i]
END;
 
Voili :sweat:



[#0055aa]


---------------
ma vie, ma carrière! - Un trait d’union entre des photos et des mots.
Reply

Marsh Posté le 14-05-2001 à 16:56:59    

je ne crois pas que ca soit faisaible aussi simplement...
 
il faut, je pense, qu'a la creation de ta form, tu parcours tous tes composants, et si c'est une checkbox avec un nom qui commance par 'ccAdr', l'ajouter a un tableau de checkbox puis apres, utiliser le tableau pour changer les captions de tes checkbox
 
par ex:

Code :
  1. type
  2.   TCheckArray = array[1..9] of TCheckbox;
  3.   tabAdr = array [1..9] OF string
  4. var
  5.   FCheckBoxes : TCheckArray;
  6. procedure TForm1.FormCreate(Sender: TObject);
  7. var
  8.   iIndex, iChkCount, iCmpCount, iPos : integer;
  9.   chkCheck : TCheckBox;
  10. begin
  11.   iCmpCount := Form1.ComponentCount;
  12.   // on parcourt tous les composants
  13.   for iIndex := 0 to iCmpCount - 1 do
  14.   begin
  15.     // on ne prend en compte que les checkboxs
  16.     if (Form1.Components[iIndex] is TCheckBox) then
  17.     begin
  18.       chkCheck := (Form1.Components[iIndex] as TCheckBox);
  19.       // on verifie sa taille
  20.       if length(chkCheck.Name) = length('ccAdrX' ) then
  21.         // on verifie son nom
  22.         if Copy(chkCheck.Name,1,length('ccAdr' )) = 'ccAdr' then
  23.         begin
  24.           // on assign la checkbox a la bonne position du tableau
  25.           // position qui est donnee par le dernier caractere composant le nom
  26.           iPos := StrToInt(chkCheck.Name[length(chkCheck.Name)]);
  27.           FCheckBoxes[iPos] := chkCheck;
  28.         end;
  29.     end;
  30.   end;
  31. end;


 
et donc maintenant, tu as un tableau avec toutes tes checkboxes et tu peux le parcourir dans une boucle pour modifier les captions ou autres proprietes
 
ps: c'est pas dit que le code marche, je l'ai fait comme ca de tete !

 

[edit]--Message édité par JWhy--[/edit]


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 14-05-2001 à 17:58:29    

Le système avec les [#...] c'est quoi ? C'est possible de faire un truc de ce genre ?
 
Ça peut tj etre utile...

 

[edit]--Message édité par antp--[/edit]


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

Marsh Posté le 15-05-2001 à 08:12:57    

JWhy a écrit a écrit :

je ne crois pas que ca soit faisaible aussi simplement...
 
il faut, je pense, qu'a la creation de ta form, tu parcours tous tes composants, et si c'est une checkbox avec un nom qui commance par 'ccAdr', l'ajouter a un tableau de checkbox puis apres, utiliser le tableau pour changer les captions de tes checkbox
 
par ex:

Code :
  1. type
  2.   TCheckArray = array[1..9] of TCheckbox;
  3.   tabAdr = array [1..9] OF string
  4. var
  5.   FCheckBoxes : TCheckArray;
  6. procedure TForm1.FormCreate(Sender: TObject);
  7. var
  8.   iIndex, iChkCount, iCmpCount, iPos : integer;
  9.   chkCheck : TCheckBox;
  10. begin
  11.   iCmpCount := Form1.ComponentCount;
  12.   // on parcourt tous les composants
  13.   for iIndex := 0 to iCmpCount - 1 do
  14.   begin
  15.     // on ne prend en compte que les checkboxs
  16.     if (Form1.Components[iIndex] is TCheckBox) then
  17.     begin
  18.       chkCheck := (Form1.Components[iIndex] as TCheckBox);
  19.       // on verifie sa taille
  20.       if length(chkCheck.Name) = length('ccAdrX' ) then
  21.         // on verifie son nom
  22.         if Copy(chkCheck.Name,1,length('ccAdr' )) = 'ccAdr' then
  23.         begin
  24.           // on assign la checkbox a la bonne position du tableau
  25.           // position qui est donnee par le dernier caractere composant le nom
  26.           iPos := StrToInt(chkCheck.Name[length(chkCheck.Name)]);
  27.           FCheckBoxes[iPos] := chkCheck;
  28.         end;
  29.     end;
  30.   end;
  31. end;


 
et donc maintenant, tu as un tableau avec toutes tes checkboxes et tu peux le parcourir dans une boucle pour modifier les captions ou autres proprietes
 
ps: c'est pas dit que le code marche, je l'ai fait comme ca de tete !
 
 




 
merci JWhy faut que j'essaie ce soir
Effectivement tout seul j'aurais pas trouvé!
...Je vais être obligé de mettre dans les crédits de mes miniSofts :
...Avec la participation de JWhy le grand  :lol:  
a+


---------------
ma vie, ma carrière! - Un trait d’union entre des photos et des mots.
Reply

Marsh Posté le 15-05-2001 à 08:33:16    

non, en fait, ce qu'il faut faire, c'est récupérer le tableau des composants (control, je crois) de ta fiche.  
Ca ferait un truc du genre:
(NomFichie.Control[i]) as (CheckBox).Caption = tab[i];

Reply

Marsh Posté le 15-05-2001 à 08:33:42    

moi, je m'en suis servi pour manipuler des onglets...

Reply

Marsh Posté le 15-05-2001 à 09:26:27    

rufo a écrit a écrit :

non, en fait, ce qu'il faut faire, c'est récupérer le tableau des composants (control, je crois) de ta fiche.  
Ca ferait un truc du genre:
(NomFichie.Control[i]) as (CheckBox).Caption = tab[i];




 
ça va foirer si il y a autre chose que des checkbox.
tab sera pas assez grand, et les i de control seront pas les mêmes que les i de tab.


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

Marsh Posté le 15-05-2001 à 10:05:00    

Le plus simple :
 
  for i := 1 to 9 do
    TCheckBox(FindComponent('ccAdr' + intToStr(i))).Caption := tabAdr[i];

Reply

Marsh Posté le 15-05-2001 à 10:10:10    

Miles V a écrit a écrit :

Le plus simple :
 
  for i := 1 to 9 do
    TCheckBox(FindComponent('ccAdr' + intToStr(i))).Caption := tabAdr[i];




bon, ba j'ai choisit ta solution : la plus simple et ressemble à mon idée théorique ET un plus elle MARCHE... :)  :)  :)


---------------
ma vie, ma carrière! - Un trait d’union entre des photos et des mots.
Reply

Marsh Posté le 15-05-2001 à 10:10:10   

Reply

Marsh Posté le 15-05-2001 à 10:11:49    

Super, j'ai gagné ! :D

Reply

Marsh Posté le 15-05-2001 à 12:42:24    

Miles V a écrit a écrit :

Le plus simple :
 
  for i := 1 to 9 do
    TCheckBox(FindComponent('ccAdr' + intToStr(i))).Caption := tabAdr[i];




 
J'y ai même pas pensé alors que j'avais utilisé FindComponent il y a une semaine pour un autre problème


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

Marsh Posté le 15-05-2001 à 13:56:20    

j'aurais appris qqchose aujourd'hui ...
 :jap:


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Sujets relatifs:

Leave a Replay

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