Einzelnen Beitrag anzeigen

bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: suche Funktion FindLastDir

  Alt 15. Nov 2007, 14:09
Zitat von marabu:
Moin,

vielleicht habe ich nicht aufmerksam genug gelesen, aber wenn ich die etwas abstrakten Anforderungen mal ignoriere und die durchscheinende Anwendungsidee betrachte, dann verstehe ich folgendes:

Anders als übliche Player will der thread owner ein automatisches Abspielen von Audio-Dateien nicht über einen vom Benutzer geordneten SnapShot eines Verzeichnisbaumes steuern, sondern die physische Abfolge von Titeln unabhängig von der Tiefe der Verzeichnisstruktur heranziehen.

Code:
- Audio
  - Best Of The 50's
    - Dean Martin - Memories Are Made Of This
    - Don Robertson - The Happy Whistler
  - Eagles
    - One Of These Nights
      - Lyin' Eyes
      - Take It To The Limit
    - Desperado
      - Tequila Sunrise
Nach dem Track "The Happy Whistler" soll der Track "Lyin' Eyes" gespielt werden - also ein Depth-First TreeWalk durch einen Verzeichnisbaum, bei dem die leafs die zu spielenden Tracks darstellen.

Freundliche Grüße
So wie du es oben darstellst, soll es sein, wenn du noch einzelne Files z.B. in Eagles\berücksichtigst sowie eine Maximalgrenze nach oben, ich biete da mal das festgelegte Rootverzeichnis "Audio" an. Ist "Tequila Sunrise" abgespielt, sollte er wieder oben anfangen bzw er geht nach "Dean Martin" durch die Tiefen-Funtion.

Hallo, also ganz so abstrakt sind die Anforderungen ja nicht. Grundsätzlich verwende ich das EasyListView zum darstellen der Struktur und man kann selbst durch alle Ordner zappen und irgendwas anspielen. Befinde ich mich in einem Ordner, spiele ich jetzt diesen ab und am Ende wieder zum ersten Track.

Jetzt kam die Frage bei den Usern auf, ob man nicht am Ende zum nächsten Ordner springen kann und diesen dann abspielen. Das fällt bei mir so in die Art eines CD-Wechslers mit dem Unterschied, das es halt im Verzeichnisbaum auch Tiefen gibt.

Mit weiteren Gedanken kam ich dann dazu, das in jedem Ordner sowie UnterOrdner als auch RestFiles liegen können, die auch automatisiert abgespielt werden müssen.

Um überhaupt das Ganze zu ermöglichen, kann ich 2 Dinge tun:

1: innerhalb des ListViews gezielt die Indexe abfragen und springen, was aber immer eine Aktualisierung des Listviews zur Folge hat, also schlecht (ListView wird über FindAllFiles gefüllt)
2: Die Struktur absuchen mit Funktionen zur Pfadermittlung aber auch Funktionen für die Inhalte der wie Ordner und Files zu haben....und wenn alles richtig läuft, das PlayFile erreicht eine einmalige Aktualisierung des ListView

So mal ganz unprofessionell angefangen (unfertig):

Delphi-Quellcode:
procedure FindDir;
var i:integer;
    aPath:string;
label DirSearch;
begin
  aPath := ExcludeTrailingPathDelimiter(PlayPath);//PlayPath merken ggf noch ändern
  Path := GetAudioplayerDirectory(PlayPath); //Path eine Ebene höher als PlayPath
  showmessage(path);
DirSearch:

  DirLst.Clear;
  ListeDir(Path,DirLst); //dort alle Ordner in Stringliste holen


{****nächsten Ordner unter PlayOrdner suchen und 1.Fileabspielen**************}

  if DirLst.Count >0 then //wenn mehr als 0 Ordner vorhanden
   begin
     for I := 0 to DirLst.Count-1 do //Ordner zählen und Play-Ordnernamen
     if aPath = DirLst.Strings[I] then //mit Liste vergleichen bzw suchen
     break; //wenn gefunden
     Inc(I); //Index-Nr ab Playordner um 1 erhöhen
   end;


  if (I < DirLst.Count) then //** wenn OrdnerIndex < DirLsteintraege
   begin
     if DirectoryExists(DirLst.Strings[I]) then //wenn Ordner vorhanden
     Path := FindLastDir(DirLst.Strings[I]); //neuen Path setzen auf tiefsten Ordner
     DirLst.Clear; //vom indexierten Ordner setzen
     FileLst.Clear;
     search:=true;
     FindAllFiles(DirLst,FileLst,Path,FileMask,false,true,true);//dort alle Ordner...
     search:=false; // ...und Files in Stringlisten holen,DirLst sollte
                                  //...leer bleiben da in tiefsten Ordner
     if FileLst.Count >0 then //wenn in Fileliste mehr als 0 Einträge
     begin
       if FileExists(FileLst.Strings[0]) then //wenn File vorhanden (1. File)
        begin
          ShowMediaFiles(listmedia,false,true); //AudioListe aktualisieren
          showmessage('Play in tiefster Ebene');
          Play(Path,0); //dann 1.File abspielen
        end;
     end else //wenn keine Einträge in Stringliste, dann
           begin
             showmessage('kein File vorhanden in tiefster Ebene');
             Goto DirSearch;
           end;

   end else if FileLst.Count >0 then //wenn erhöhter OrdnerIndex >DirLsteinträge
     begin //sprich kein weiterer Ordner mehr
       if FileExists(FileLst.Strings[0]) then //dann wenn File vorhanden (1. File)
        begin
          ShowMediaFiles(listmedia,false,true); //Audioliste aktualisieren
          showmessage('Play restliche Files unter Ordner');
          Play(Path,0); //und 1.File abspielen


        end else
             begin //wenn Ordner und Files nicht mehr vorhanden
               showmessage('Loop zum ersten Ordner vom Root')
               fehlt noch //dann bei erstem Ordner ab MediaRoot anfangen
             end;
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat