Hallo Gausi auch wenn ich am Ende immer die Listen lösche passiert leider das selbe
Delphi-Quellcode:
procedure TfMain.btnSearchClick(Sender: TObject);
var
i: Integer;
sDateiname,sArtist,sTitle:String;
slMP3.Clear; // vor dem füllen löschen
//hier wird slMP3 mit allen mp3 Dateien gefüllt die auf der Festplatte gefunden wurden
//ab hier werden diese Dateien dann nach ID3Tag überprüft um sie dann Ordnungsgemäß anzuzeigen
for I := 0 to slMP3.Count - 1 do
begin
//ID3v1Tag auslesen
if ID3v1Tag.ReadFromFile(slMP3.Strings[i]) then
begin
with ID3v1Tag do
begin
slTmp1.Add(Artist);
slTmp1.Add(Album);
slTmp1.Add(Year);
slTmp1.Add(Title);
end;
end;//if
//ID3v2Tag auslesen
if ID3v2Tag.ReadFromFile(slMP3.Strings[i]) then
begin
with ID3v2Tag do
begin
slTmp2.Add(Artist);
slTmp2.Add(Album);
slTmp2.Add(Year);
slTmp2.Add(Title);
end;
end;//if
//ab hier soll geprüft werden ob in slTmp1 oder slTmp2 was drin steht
//und wenn in einer StringList (aber nur eine) was enthalten ist soll
//dieser Eintrag in lbMP3Ausgabe eingetragen werden
//mein versuch erst slTmp überprüfen ob in String 0 und String 3 was enthalten ist
if (slTmp1.Strings[0] <> '') and (slTmp1.Strings[3] <> '') then
begin
sArtist := slTmp1.Strings[0];
sTitle := slTmp1.Strings[3];
lbMP3Ausgabe.Items.Add(sArtist +' - '+ sTitle);
end
else
begin
//wenn nichts vorhanden ist weiter und slTmp2 überprüfen
if (slTmp2.Strings[0] <> '') and (slTmp2.Strings[3] <> '') then
begin
sArtist := slTmp2.Strings[0];
sTitle := slTmp2.Strings[3];
lbMP3Ausgabe.Items.Add(sArtist +' - '+ sTitle);
end
else
begin
// wenn in slTmmp2 auch nichts enthalten ist dann nur Dateinamen eintragen
sDateiname := ExtractFileName(slMP3.Strings[i]);
lbMP3Ausgabe.Items.Add(ChangeFileExt(sDateiname,''));
end;//if slTmp2
end;//if slTmp1
slTmp1.Clear;
slTmp2.Clear;
end;//for
//Speicher freigeben außer slMP3 die wird noch Temporär gebraucht
slTmp1.Clear;
slTmp2.Clear;
slTmp1.Free;
slTmp2.Free;
end;//procedure