Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
Delphi 7 Enterprise
|
Re: suche Funktion FindLastDir
16. Nov 2007, 13:58
Soo hier mal die komplette Procedure um den nächsten Track zu finden und abzuspielen:
Vielleicht gibt es ja noch Verbesserungsvorschläge in Bezug auf ein Limit nach oben setzen bzw Abbrechen, wenn er zulange sucht...
Delphi-Quellcode:
procedure PlayAbsoluteNext;
var I:integer;
bPath:string;
label setIndex,proofFolder,proofFiles,noFiles,areFiles;
begin
ListFlag := True; //PlayIcons ausblenden
bPath := ExcludeTrailingPathDelimiter(PlayPath);//PlayPath merken
GetAudioplayerDirectory(PlayPath); //Drives abfragen
if (bPath = MediaPath)or(DriveLst.Count >0) then //oberste Rootgrenze erreicht
begin
Path := MediaPath;
I := 0;
search:=true;
DriveLst.Clear;
DirLst.Clear;
FileLst.Clear;
FindAllFiles(DirLst,FileLst,Path,FileMask,false,true,true);
(DirLst as TStringList).Sort; //alphab. sortieren
(FileLst as TStringList).Sort;
goto proofFolder;
//Path eine Ebene höher als PlayPath,Rootgrenze nicht
end else Path := GetAudioplayerDirectory(PlayPath); //...erreicht
setIndex: //...Durchlaufpruefungen !
search:=true;
DriveLst.Clear;
DirLst.Clear;
FileLst.Clear;
FindAllFiles(DirLst,FileLst,Path,FileMask,false,true,true);
(DirLst as TStringList).Sort; //alphab. sortieren
(FileLst as TStringList).Sort;
if DirLst.Count >0 then
begin
for I := 0 to DirLst.Count-1 do //Ordner zählen und Play-Ordnernamen
if bPath = DirLst.Strings[I] then //mit Liste vergleichen bzw suchen
break; //wenn gefunden
Inc(I); //Index-Nr ab Playordner um 1 erhöhen
end;
proofFolder: //...auf Ordner pruefen
if (I < DirLst.Count) then
begin
if DirectoryExists(DirLst.Strings[I]) then
Path := FindLastDir(DirLst.Strings[I]);//neuen Path setzen auf tiefsten Ordner
DriveLst.Clear;
DirLst.Clear;
FileLst.Clear;
search:=true;
FindAllFiles(DirLst,FileLst,Path,FileMask,false,true,true);//Inhalte holen
(DirLst as TStringList).Sort; //alphab. sortieren
(FileLst as TStringList).Sort;
end;
goto proofFiles;
proofFiles: //..auf Files pruefen
if FileLst.Count = 0 then goto noFiles
else if FileLst.Count > 0 then goto areFiles;
areFiles: //..Files vorhanden
if FileExists(FileLst.Strings[0]) then
begin
ShowMediaFiles(listmedia,false,true);
Play(Path,0);
end;
exit;
noFiles: //..keine Files vorhanden
bPath := ExcludeTrailingPathDelimiter(Path);
if bPath = MediaPath then Path := MediaPath //oberste Rootgrenze erreicht
else Path := GetAudioplayerDirectory(Path); //Path eine Ebene höher als PlayPath
goto setIndex; //..dann erneuter Durchlauf
end;
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
|
|
Zitat
|