![]() |
Problem bei schleife
Hallo zusammen, ich habe in meinen Programm eine ListBox mit 2 Spalten. Die erste Spalte gibt den Namen an und die zweite Spalte den Authoren.
Die Strings werten von einem MasterServer direkt zum Client übertragen. Masterserver:
Delphi-Quellcode:
Dieser schickt es in einem String in folgendem Schema zum Client:
[Maplist]
Anzahl=8 1=CYT_vs_unfair|D-FENS 2=area_Fayt_51|D-FENS 3=Die_Sanduhr|D-FENS 4=Krossfire|D-FENS 5=newm_01|- 6=newm_02|- 7=newm_03|- 8=newm_04|- CYT_vs_unfair|D-FENS|area_Fayt_51|D-FENS|Die_Sanduhr|D-FENS usw. Der Client zerteilt das | wieder in Einzeleile und wertet diese aus. Das Problem liegt jetzt in einer Schleife bei der übernahme in die Listbox
Delphi-Quellcode:
I fängt aus dem Grund bei 2 an, weil die 0 den Befehl "Maplist" enthält, an dem sich die Clients orientieren und wissen, welcher Befehl gerade kommt. Die 1 ist vergeben, weil sie die Anzahl der verschickten Maps mitsich bringt.
if (StrArr[0] = 'Maplist') and (AUser.Nick = 'KKND|Masterserver') then
begin Form6.Maplist.Clear; Anzahl := StrtoInt(StrArr[1]); for i := 2 to Anzahl do begin LI := Form6.Maplist.Items.Insert(i); LI.Caption := StrArr[i]; LI.SubItems.Add(StrArr[i+1]); end; end; Wenn ich das so Starte, ist immer nur jeder Zweite Eintrag in der Listview korrekt. Die Listview sieht dann so aus: CYT_vs_unfair D-FENS D-FEN area_Fayt_51 area_Fayt_51|D-FENS usw. Kann mir jemand helfen? |
Re: Problem bei schleife
Hallo RedShakal
in der Schleife passiert folgendes (wenn ich das richtig entnommen habe): du erstellt für jeden Eintrag in deiner Stringliste ein neues Item in der Listview und erstellst dazu ein Subitem mit dem direkt folgendem Eintrag in der Stringliste....so weit so gut... du willst jetzt aber bestimmt nur jeden zweiten Eintrag bekommen? schau dir mal das hier an:
Delphi-Quellcode:
mfg
if (StrArr[0] = 'Maplist') and (AUser.Nick = 'KKND|Masterserver') then
begin Form6.Maplist.Clear; Anzahl := StrtoInt(StrArr[1]); for i := ( Anzahl - 2 ) div 2 do begin LI := Form6.Maplist.Items.Insert ( 2 * i - 1 ); LI.Caption := StrArr [ 2 * i - 1 ]; LI.SubItems.Add ( StrArr [ 2 * i ] ); end; end; |
Re: Problem bei schleife
ich hab jetzt auf deinem code basierend ein bisschen rumprobiert und so klappt es soweit, aber leider fehlt der letzte eintrag :/
Delphi-Quellcode:
if (StrArr[0] = 'Maplist') and (AUser.Nick = 'KKND|Masterserver') then
begin Form6.Maplist.Clear; Anzahl := StrtoInt(StrArr[1]); for i := 2 to Anzahl do begin LI := Form6.Maplist.Items.Insert ( 2 * i - 1 ); LI.Caption := StrArr [ 2 * i - 2]; LI.SubItems.Add ( StrArr [ 2 * i - 1 ] ); end; end; |
Re: Problem bei schleife
Natürlich fehlt der letzte Eintrag. In Anzahl steht 8, Du durchläufst die Schleife von 2 bis 8 einschließlich, d.h. 7 mal.
|
Re: Problem bei schleife
Ah super Denkfehler! Danke :love:
|
Re: Problem bei schleife
Ich nochmal: Ich habe jetzt eine 3te Spalte hinzugefügt die das Upload Datum enthällt.
Delphi-Quellcode:
if (StrArr[0] = 'Maplist') and (AUser.Nick = 'KKND|Masterserver') then
begin Form6.Maplist.Clear; Anzahl := StrtoInt(StrArr[1]); for i := 1 to Anzahl do begin LI := Form6.Maplist.Items.Insert(3*i-1); LI.Caption := StrArr[3*i-1]; LI.SubItems.Add ( StrArr[3*i] ); LI.SubItems.Add ( StrArr[3*i-2] ); end; end; Leider muss ich gestehen das ich nicht weiß warum das so funktioniert aber ich hoff es kann mir jemand erklären. Der Code funktioniert soweit Prima, leider ist aber in der ersten Spalte ein kleiner Fehler. ( Irgentwo ist das auch logisch weil i = 1 enthält ja eigentlich die Anzahl der übermittelten Maps. Aber leider fehlt die erste Zeile komplett wenn ich I = 2 mache. ![]() |
Re: Problem bei schleife
Hallo,
und beim 4. Eintrag geht alles wieder von vorne los. Du machst es dir aber auch künstlich schwer. entwder Explode (hier mal suchen) oder zu Fuss über eine StringList IniList ist eine Liste aller "Zeilen"
Delphi-Quellcode:
sl: TStringList;
sl:= TStringList.Create; for iList:= 0 to IniList.Count-1 do begin sl.Delimiter:= '|'; sl.DelimitedText:= 'CYT_vs_unfair|D-FENS' // jetzt ist in sl[0] 'CYT_vs_unfair' und in sl[1] 'D-FENS' ListView.Items.Add; ListView.Caption:= sl[0]; end; Heiko |
Re: Problem bei schleife
ich benutze doch bereits die explode funktion
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz