Comment synchroniser deux listbox ? [Résolu]

dino34 24 Messages postés jeudi 6 janvier 2011Date d'inscription 24 juin 2017 Dernière intervention - 21 févr. 2015 à 17:50 - Dernière réponse : dino34 24 Messages postés jeudi 6 janvier 2011Date d'inscription 24 juin 2017 Dernière intervention
- 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 .




--
Afficher la suite 

Votre réponse

9 réponses

dubois77 691 Messages postés jeudi 17 avril 2008Date d'inscription 19 juin 2018 Dernière intervention - 21 févr. 2015 à 18:37
0
Merci
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
Commenter la réponse de dubois77
dino34 24 Messages postés jeudi 6 janvier 2011Date d'inscription 24 juin 2017 Dernière intervention - 21 févr. 2015 à 19:53
0
Merci
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




--
Commenter la réponse de dino34
dino34 24 Messages postés jeudi 6 janvier 2011Date d'inscription 24 juin 2017 Dernière intervention - 21 févr. 2015 à 21:05
0
Merci
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 .

--
Commenter la réponse de dino34
dubois77 691 Messages postés jeudi 17 avril 2008Date d'inscription 19 juin 2018 Dernière intervention - 22 févr. 2015 à 08:33
0
Merci
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;
Commenter la réponse de dubois77
cs_yanb 260 Messages postés lundi 27 octobre 2003Date d'inscription 4 mars 2016 Dernière intervention - Modifié par cs_yanb le 23/02/2015 à 09:06
0
Merci
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 @+
dubois77 691 Messages postés jeudi 17 avril 2008Date d'inscription 19 juin 2018 Dernière intervention - 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
Commenter la réponse de cs_yanb
dino34 24 Messages postés jeudi 6 janvier 2011Date d'inscription 24 juin 2017 Dernière intervention - 23 févr. 2015 à 19:27
0
Merci
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;

Whismeril 11625 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 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
dino34 24 Messages postés jeudi 6 janvier 2011Date d'inscription 24 juin 2017 Dernière intervention - 26 févr. 2015 à 12:08
Bonjour:

le nécessaire a été fait .

merci
Commenter la réponse de dino34

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.