Bass library kullanarak mp3 çalar yapıyorum. Hazır verilmiş bir örnekten yola çıktığım bu projede seçtiğim klasör içindeki mp3 leri çalma listesine eklerken işin içinden çıkamadığım bir sorunla karşılaştım. Sorunum M3u.AddFile adında TStrings tipinde değer alan bir prosedür var. Bu prosedüre verdiğiniz bilgiyi çalma listesine ekliyor.
(Çalma listesi Listbox1 adlı bileşende tutuluyor. Listbox1.Style:=lbVirtual şeklinde. Aşağıdaki prosedür ile bilgiyi direk göndererek olmuyor, M3u.AddFiles prosedürüne göndermem mecburi)
Aşağıda seçtiğiniz klasördeki içindeki mp3leri, seçtiğiniz listboxa dosya yolu ve şarkı adıyla ekleyen prosedürüm var. Bu prosedürü TStrings tipinde değer döndüren bir fonksiyon haline getirip M3u.AddFiles (Mp3leri_Yükle); şeklinde kullanmak istiyorum.
Ek olarak bir soru : Çalma listesi 2000-3000 gibi şarkı olursa TStrings tipte bir değişken kullanmak doğru olur mu ? Eğer doğru değilse başka bir yol gösterirmisiniz.
Prosedürüm şu şekilde;
Kod: Tümünü seç
procedure Mp3leri_yukle(listele:TListBox; const PathName,FileName: string; const InDir: boolean );
var Rec : TSearchRec;
Path : string;
begin
Path := IncludeTrailingBackslash(PathName);
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then
try
repeat
listele.Items.Add(Path + Rec.Name); //şarkının yolu ve adını yükle
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
If not InDir then Exit;
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..') then
Klasordeki_Mp3leri_yukle(listele, Path + Rec.Name, FileName, True);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;
Bu şekilde Fonksiyon haline çevirmeye çalıştım olmadı. Kullanırken herhangi bir hata almadım ama bilgide gelmedi

Kod: Tümünü seç
function Mp3leri_yukle(const PathName,FileName: string; const InDir: boolean ):TStrings;
var Rec : TSearchRec;
Path : string;
Cikti: TStrings;
begin
Cikti:=TStringList.Create;
Path := IncludeTrailingBackslash(PathName);
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then
try
repeat
Cikti.Add(Path + Rec.Name); //şarkının yolu ve adını yükle
// Cikti.Add(Rec.Name);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
If not InDir then Exit;
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..') then
KMp3leri_yukle( Path + Rec.Name, FileName, True);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
Result:=Cikti;
Cikti.Free;
end;