Récupérer l'état d'une checkbox et remplir une TList [Résolu]

Signaler
-
 nathalg -
Bonjour,
Je sais que ce n'est pas dutout le moment, vu que tout le monde doit être occupé par les prépas du nouvel an.Je vais comme même exposer mon problème en cas où.
Je souhaiterai donc remplir une TList avec l'état actuel de 12 checkboxs.
Càd que si je configure mes 12 checkboxs en ordre comme suit:
True, True,False,True,False,False,True,True,False,False,False et True. Ma Tlist se remplit comme suit:
2,2,1,2,1,1,2,2,1,1,1 et 2.

Sachant que ma TList se remlit avec le principe de:

Si checkbox cochée: ContenuTlist = 2;
Si checkbox pas cochée: ContenuTlist = 1;

En même temps, il faut que le contenu de ma list s'actualise en fonction de si je coche ou pas la checkbox.

Je vous serai vraiment reconnaissante de votre aide.

Bonne fête de din d'année.

4 réponses

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
Salut
Tu remplis d'abord tal liste avec 12 fois '1' (vide par défaut)

pour chaque checkBox tu crée une procédure Onchange (en cliquant dessus dans l'EDI
ce qui donne ceci (pour les 3 premiers) :
procedure TForm1.Check1Click(Sender: TObject);
begin
if Check1.Checked
then Liste.Items[0] := '2'
else Liste.Items[0] := '1';
end;

procedure TForm1.Check2Click(Sender: TObject);
begin
if Check2.Checked
then Liste.Items[1] := '2'
else Liste.Items[1] := '1';
end;

procedure TForm1.Check3Click(Sender: TObject);
begin
if Check3.Checked
then Liste.Items[2] := '2'
else Liste.Items[2] := '1';
end;

(le numéro de ligne d'un Tlist commence à 0 d'ou le décalage)
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Salut,

Pas grand chose à rajouter à ce que dit dubois77.
Simplement, si tes CheckBox s'appellent "CheckBox1", "CheckBox2", etc jusqu'à 12, tu peux simplifier en n'utilisant que l'évènement "CheckBox1Click" et en automatisant tout dans l'évènement "OnCreate" du Form, comme ceci :

procedure TForm1.FormCreate(Sender: TObject);
const
  CheckBoxCount = 12; // nombre de CheckBox
var
  i: Integer;
begin
  for i := 0 to CheckBoxCount - 1 do
  begin
    TCheckBox(FindComponent('CheckBox' + IntToStr(i + 1))).Tag := i;
    TCheckBox(FindComponent('CheckBox' + IntToStr(i + 1))).OnClick := CheckBox1Click;
    MyList.Items.Append('1');
  end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
const
  Chk: array[Boolean] of string = ('1', '2');
begin
  MyList.Items[(Sender as TCheckBox).Tag] := Chk[(Sender as TCheckBox).Checked];
end;
Bonsoir,

Tout d'abord, je vous remercie pour vos réponses.
Après avoir combiné entre les deux, j'ai réussi à obtenir le code suivant:

procedure TForm1.ComparerEtats(Sender: TObject);
var
i,j: integer;
cbo : TComboBox;
chb : TCheckBox;
lab, lab1 : TLabel;
ListError : TList;
ConfigRobot : TList;
Etachb : integer;
begin
for i := 0 to ConfigRobot.Count-1 do
begin
//Initialisation
cbo := TComboBox(FindComponent('Combobox' + IntToStr(i)));
chb := TCheckBox(FindComponent('CheckBox' + IntToStr(i)));
lab := TLabel(FindComponent('Label' + IntToStr(i)));


if chb.Checked then
ConfigRobot.Items[i] := pointer(ON_STATUS)
else
ConfigRobot.Items[i] := pointer(OFF_STATUS);

ListError := Tache1.Comparer(ConfigRobot);

for j := 0 to ListError.count -1 do
begin
lab1 := TLabel(FindComponent('Label' + IntToStr(i)));
lab1.Font.Color := clRed;
end;
end;
ConfigRobot.free;
end;

Sauf qu'à sa compilation, ça me renvois une exception du type:"violation d'accès à l'adresse 0046F647".

Je suis complètement perdue vu que je ne vois pas du tout la provenance de l'erreur.

Merci d'avance pour votre aide.
En fait je ne peux pas effectuer l'affectation vu que la liste renvoie des pointeur et que ce que je veux affecter moi, se sont des entiers :( j'ai essayé de faire un tans-type avec "pointer" mais ça me revois une autre exception ;(
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Je voulais écrire :
tu ne nous précise pas ce QUE sont "ON_STATUS" et "OFF_STATUS"
Salut,
* En fait, je suis obligée d'utiliser le pointer vu qu'une List renvoie ça.
* ON_STATUS, OFF_STATUS c'est des types que j'ai déclaré tout au début et pour me référencier, je les ai nomé ainsi, mais en gros, ON_STATUS=2, et OFF_STATUS=2.
* CCM/[/ CodeS-SourceS] ?????je ne le retrouve nul part :(
*Merci Korgis, c'étais bien ça, en fait j'utilisé la taille de la liste ConfigRobot sans même pas l'avoir crée.Du coup ben la boucle allait de 0 à 0, c'est pour ça que ça plantait,en plus j'ai crée les 2 liste à l'intérieur de la boucle, et c'était ça l'excéption.
*ça fonctionne très bien.
Merci encore pour votre aide :) c'est très gentil ;)
OFF_STATUS=1; Pardon
Dubois77 : merci c'était bien ça, ma liste n'était pas crée et n'avait aucune date, donc ct pas possible de l'adabter au nombre de cmb que j'avais.
A bientôt sur une autre question sur les fichiers .ini :D