Comment synchroniser deux listbox ?

Résolu
dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023 - 21 févr. 2015 à 17:50
dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023 - 26 févr. 2015 à 12:08
Bonjour,

j'ai un listbox1 qui contient des nombres de 1 à 100.

je cherche à faire une division par 21 chaque 21 lignes et transférer le résultat

vers listbox2.


par exemple:

du 1 au 20 (listbox1) j'aurai 0 dans (listbox2)
du 21 au 41 (listbox1) j'aurai 1 dans (listbox2)
du 42 au 63 (listbox1) j'aurai 2 dans (listbox2)
du 64 au 83 (listbox1) j'aurai 3 dans (listbox2)
du 84 au 100 (listbox1) j'aurai 4 dans (listbox2)

je cherche quand je clic sur button1 :

il m'affiche dans listbox2 le tout à la fois :
0
1
2
3
4

procedure TForm1.Button1Click(Sender: TObject);               

var

i,Nr: integer;

begin

ListBox2.Clear;

Nr:=0;
for i := ListBox1.Items.Count-1 downto 0 do
Nr := StrToIntDef(ListBox1.Items[ListBox1.ItemIndex], 0);
Nr := Trunc(Nr/22);
ListBox2.Items.Add(IntToStr(Nr));
end;
end.




NB: le code que j'ai transfert un seul items cité en haut 0 ou 1 ou 2 etc.



merci pour votre aide et support .




--

6 réponses

dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
21 févr. 2015 à 18:37
Salut
Ce n'est pas très clair !
voici déjà quelques commentaires sur ton code publié en attendant plus de précisions :

"for i := ListBox1.Items.Count-1 downto 0 do"
=> il manque "begin",
=> "dowto" donc on commence par la fin ? ce qui ne correspond pas à l'exemple qui commence par la ligne 1 (en fait c'est "ligne 0" comme dans tout les listbox

"Nr := StrToIntDef(ListBox1.Items[ListBox1.ItemIndex], 0);"
=> "ListBox1.ItemIndex" n'a rien à voir avec le calcul car il ne bouge pas car il correspond à la ligne précédemment cliquée sur le listbox
=> "Nr := StrTo ..." => en fait il faut mettre "Nr := Nr + StrTo ..." sinon en final tu n'auras le résultat que de la dernière ligne et de plus divisée par par la ligne code qui suit !

"Nr := Trunc(Nr/22);"

Dans ton exemple le nombre de ligne traitée est différent à chaque fois. Est volontaire ?
du 1 au 20 (listbox1) j'aurai 0 dans (listbox2) ==> 20 lignes
du 21 au 41 (listbox1) j'aurai 1 dans (listbox2) ==> 21 lignes
du 42 au 63 (listbox1) j'aurai 2 dans (listbox2) ==> 22 lignes
du 64 au 83 (listbox1) j'aurai 3 dans (listbox2) == 20 lignes
du 84 au 100 (listbox1) j'aurai 4 dans (listbox2) ==> 17 lignes
0
dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023
21 févr. 2015 à 19:53
salut dubois77:

c'est copié collé qui a fait le problème ,la division est par 22 .

j'ai essayé d'expliqué une seul chose :

je veux faire la divisons des items qui se trouve dans listbox1 par 22 chaque 22 lignes et mettre le résultat dans listbox2.


merci




--
0
dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023
21 févr. 2015 à 21:05
salut dubois77

je cherche à envoyer le projet .exe mais j'arrive pas à le faire

est ce qu'il y a un autre moyen à le faire

merci .

--
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
22 févr. 2015 à 08:33
Essaye celà :


NR := 0;
IX := 0;
for i:=0 to ListBox1.Items.Count-1 to 0 do
begin
Nr := Nr + StrToIntDef(ListBox1.Items[ListBox1.ItemIndex], 0);
inc(IX);
if IX=22 then
begin
Nr := Trunc(Nr/22);
ListBox2.Items.Add(IntToStr(Nr));
Nr := 0;
IX := 0;
end;
end;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
Modifié par cs_yanb le 23/02/2015 à 09:06
Salut,
var
EndVal, I : Integer;
...
begin
EndVal := StrToIntDef(ListBox1.Items[ListBox1.Items.Count-1],0)div 22;
for I := 0 to EndVal do
ListBox2.Items.Add(Format('%d',[I]));
end;
//ou plus simple
begin
EndVal := ListBox1.GetCount div 22;
//ou => EndVal := ListBox1.Items.Count div 22;
for I := 0 to EndVal do
ListBox2.Items.Add(Format('%d',[I]));
end;
@+

@dubois77, Salut, je crois que
for i:=0 to ListBox1.Items.Count-1 to 0 do
va y avoir un ti problème LOL @+
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
23 févr. 2015 à 11:13
Oui yanb, il y a un petit to 0 qui est resté suite au copier de ligne originale
mais dino34 ne c'est sans doute pas laissé prendre

Par contre je ne crois pas qu'avec ta méthode le résultat soit conforme à la demande de dino34 :
à priori si j'ai bien compris il fait la somme de chaque paquet de 22 lignes et affiche le résultat dans listbox2
Seul dino34 peut dire si je pense bien !!
Cordialement
0
dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023
23 févr. 2015 à 19:27
Salut et désoler pour le retard :


Le code que j'ai utilisé pour régler le problème est listé ci-dessous:

var
r:temp,IX : integer;

begin
temp :=0;
IX :=0;
for r:=0 to ListBox1.Items.Count-1 do
begin
temp:= StrToIntDef(ListBox1.Items.Strings [r],0);
inc(IX);
if IX=22 then
begin
temp:=trunc(temp/22) ;
ListBox2.Items.Add (IntToStr (temp));
temp := 0;
IX :=0;
end;
end;
end;

0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
25 févr. 2015 à 08:57
Bonjour, si la question est résolue, merci de cliquer sur le lien "Marquer comme résolu" juste sous le titre de la discussion
0
dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023
26 févr. 2015 à 12:08
Bonjour:

le nécessaire a été fait .

merci
0
Rejoignez-nous