Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Playlist out of Bounds?


Tony-S - Do 07.01.10 00:58
Titel: Playlist out of Bounds?
Hallo Forum ich habe ein kleines Problem bei dem ich einfach nicht weiter weiß :/

Ich habe zwei Listboxen einmal Listbox 1 in der ganze Pfade stehen und einmal Listbox2 in der die Dateinamen stehen sollen,
mit einem Dialog füge ich Dateien hinzu


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
for I := 0 to OpenDialog1.Files.Count-1 do
        begin

        if listbox1.Items.Count < opendialog1.Files.Count  then
        begin
        listbox1.Items.add(opendialog1.Files[i])  ;
        Listbox2.Items.add(extractfilename(Listbox1.Items[i])) ;
        end
        else
        if listbox1.Items.Count > 0 then
        begin
        listbox1.Items.add(opendialog1.Files[i])  ;
        listbox2.Clear;
        
        i2:=listbox1.Items.Count;
        
        // Fehler
        // Listbox2.Items.add(extractfilename(listbox1.Items[i2])) ;
        end;


Das einzigste was ich nicht hinbekomme ist der auskommentierte Teil in der vorletzten Zeile
Wenn ich zu erst dateien hinzufüge und listbox1 noch leer ist und 2 Dateien hinzufüge ist I2 quasi 0 und wenn ich jetzt noch 3 Dateien hinzufüge ist I2 5,
weil die Anzahl der items jetzt nunmal 5 ist - also wieso bekomm ich dann diese Meldung :/

fehler

Wäre nett wenn mir jemand meinen Fehler sagt, ich komm nicht drauf

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.


Narses - Do 07.01.10 01:47

Moin!

Ehrlich gesagt kapiere ich deinen Code nicht... :gruebel: Möchtest du vielleicht einfach das hier tun: :nixweiss:

Delphi-Quelltext
1:
2:
3:
4:
  for i := 0 to OpenDialog1.Files.Count-1 do begin
    ListBox1.Items.Add(OpenDialog1.Files[i]);
    ListBox2.Items.Add(ExtractFileName(OpenDialog1.Files[i]));
  end;
Wenn nicht, solltest du nochmal ausführlich (mit Beispiel) erklären, was da genau passieren soll. :?

cu
Narses


jaenicke - Do 07.01.10 02:53

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
        i2:=listbox1.Items.Count;
        
        // Fehler
        // Listbox2.Items.add(extractfilename(listbox1.Items[i2])) ;
        end;
Nun ja...
Nehmen wir an du hast 3 Einträge in der ListBox: Eintrag 0, 1 und 2.
So, und du greifst jetzt auf Eintrag listbox1.Items.Count zu, das ist aber Eintrag 3, den gibts aber nicht...


Tony-S - Do 07.01.10 10:02

Ah ok ja das stimmt, hab garnicht bedacht das es mit 0 beginnt, gut habe jetzt zwar kein Delphi zu Hand,
aber wenn ich es so schreibe, müsste es gehen wie es soll, ja?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
I2:=listbox1.items.count - 1;


for 0 to i2 do
// oder for 0 to listbox1.items.count - 1 do
// 1. Zeile würde dann entfallen
begin
Listbox2.Items.add(extractfilename(listbox1.Items[i2])) ;
end;


Ich bedank mich erstmal, muss dann mal zu Hause gucken obs denn so klappt ^^

Edit: Schleifenvariable korrigiert


Tilman - Do 07.01.10 13:46

Die richtige Syntax lautet

Delphi-Quelltext
1:
for Zaehlvariable := start to ende do befehl;                    

(bzw. ende downto start). Wobei du Zaehlvariable dann für deinen Listen-Index verwenden kannst.


Tony-S - Do 07.01.10 20:56

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Ehrlich gesagt kapiere ich deinen Code nicht... :gruebel: Möchtest du vielleicht einfach das hier tun: :nixweiss:

Delphi-Quelltext
1:
2:
3:
4:
  for i := 0 to OpenDialog1.Files.Count-1 do begin
    ListBox1.Items.Add(OpenDialog1.Files[i]);
    ListBox2.Items.Add(ExtractFileName(OpenDialog1.Files[i]));
  end;
Wenn nicht, solltest du nochmal ausführlich (mit Beispiel) erklären, was da genau passieren soll. :?

Ehm ja, das war es was ich eigentlich brauchte :/ - naja gut es war spät, ich schieb es mal drauf....., es ging eigentlich hauptsächlich darum die pfade dann in einer txt Datei zu speichern und auch wieder zu laden, deshalb das ganze, die anderen beiden Antworten waren deshalb aber trotzdem nützlich danke :)


Blackheart666 - Do 07.01.10 21:03

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Ehm ja, das war es was ich eigentlich brauchte :/ - naja gut es war spät, ich schieb es mal drauf....., es ging eigentlich hauptsächlich darum die pfade dann in einer txt Datei zu speichern und auch wieder zu laden, deshalb das ganze, die anderen beiden Antworten waren deshalb aber trotzdem nützlich danke :)

Dann solltest du dir vieleicht mal TStringlist anschauen.

Moderiert von user profile iconNarses: Zitat gekürzt.