PIPOTRON V1.4.2

Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
- - Dernière réponse : cs_Christophe67
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
- 24 mars 2010 à 12:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51472-pipotron-v1-4-2

cs_Christophe67
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
-
Bonjour à tous,

Je me doute qu'il doit y avoir le moyen d'optimiser la répétition de code suivante à l'aide d'une boucle:

...
Num := RandomRange(0, List2.Items.Count);
List2.ItemIndex := Num;
Liste2 := List2.Items.Strings[Num];
...

J'ai essayé avec for I := 1 to 9 do
et en remplacant les numéros par [i] mais çà n'allait pas.
Si une âme charitable veut bien m'initier ce n'est pas de refus.

Merci d'avance !
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 -
Je n'ai pas encore regardé le code, désolé.

Mais je peux corriger un truc, c'est que l'idée originale vient d'un polytechnicien, il y a plusieurs décennies déjà.
A l'époque, la cible était plutôt les discours pseudo-scientifico-économico-politiques, si je me souviens bien.
Mais il aurait été vraiment marrant de mettre ça à la sauce "pseudo informaticien" (pour le fun ;)

Voilà pour la forme.
Pour le fond, j'ai confiance en l'avenir... ;)
Debiars
Messages postés
285
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
11 février 2018
-
Bonjour Christophe,
En réponse à ta demande je propose ceci :

Remplace Liste1 à Liste 9 par Liste : array[1..9] of string;

Ajoute la fonction suivante qui te renverra le nom de la ListBox à traiter :

function Tf_Main.List(no : byte) : TListBox;
begin
result := FindComponent('List'+ IntToStr(no)) as TListBox;
end;

et modifie la procédure BtnGenereClick comme ceci :

procedure Tf_Main.BtnGenereClick(Sender: TObject);
var Num,i : integer;
begin
// Vide le composant TMemo de tout texte
Memo.Clear;
for i := 1 to 9 do
begin
Num := RandomRange(0, List(i).Items.Count);
List(i).ItemIndex := Num;
Liste[i] := List(i).Items.Strings[Num];
end;
Memo.Lines.Add(Format(PipoLine, [Liste[1], Liste[2], Liste[3], Liste[4], Liste[5],
Liste[6], Liste[7], Liste[8], Liste[9]]));
end;

ça simplifie, n'est-ce pas ... et j'ai testé bien entendu.
jlen100
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7 -
salut
utilise findcomponent qui permet de retriuver un composnt par son nom
du genre:
for i:=1 to 9 do
begin
Num :=TListBox(FindComponent('List'+inttostr(i))).Items.Count ;
Num := RandomRange(0, Num);
TListBox(FindComponent('List'+inttostr(i))).ItemIndex :=Num;
TListBox(FindComponent('List'+inttostr(i))):=TListBox(FindComponent('List'+inttostr(i))).Strings[Num];
end;
je n'ai pas testé le code mais cela devrai marcher
jlne
cs_Christophe67
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
-
Merci pour vos réponses,

J'ai en fait choisi un mixe de vos 2 codes en écrivant

procedure Tf_Main.BtnGenereClick(Sender: TObject);
var Num, i : integer;
Liste : array[1..9] of String;
begin
Memo.Clear;
for i:=1 to 9 do
begin
Num :=TListBox(FindComponent('List'+IntToStr(i))).Items.Count ;
Num := RandomRange(0, Num);
TListBox(FindComponent('List'+inttostr(i))).ItemIndex :=Num;
Liste[i]:=TListBox(FindComponent('List'+inttostr(i))).Items.Strings[Num];
end;
Memo.Lines.Add(Format(PipoLine, [Liste[1], Liste[2], Liste[3], Liste[4], Liste[5], Liste[6], Liste[7], Liste[8], Liste[9]]));
end;

Cela fonctionne très bien, merci encore.