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

nathalg - 31 déc. 2013 à 17:02 - Dernière réponse :  nathalg
- 2 janv. 2014 à 16:52
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.
Afficher la suite 

Votre réponse

11 réponses

dubois77 692 Messages postés jeudi 17 avril 2008Date d'inscription 14 septembre 2018 Dernière intervention - 31 déc. 2013 à 18:07
0
Merci
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)
Commenter la réponse de dubois77
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 31 déc. 2013 à 23:26
0
Merci
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;
Commenter la réponse de korgis
0
Merci
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.
Commenter la réponse de nathalg
0
Merci
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 ;(
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 2 janv. 2014 à 16:12
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 ;)
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
Commenter la réponse de nathalg

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.