Hallo,
ich habe da ein großes problem. ich möchte gerne das meine findfirst funktion folgendes macht:
Sie soll alle Verzeichnise auflisten wo die entsprechenden endungen drin sind und alle dateien auf listen die die enstrpechenden endungen haben. zuzätlich möchte ich gerne das bestimmte dateien geladen werden in die treeview also als verzeichnis behandelt werden.
ich hoffe ihr habe das was ich möchte verstanden. hier ein kleines beispiel wie ich es mir vorstelle:
Delphi-Quellcode:
verzeichnis1
Dateien.mp3
playliste.m3u
inhaltderplayliste
weitere dateien.m4a
also root soll das suchverzeichnis eingefügt werden.
ich hatte es schon hinbekommen mit verzeichnise und dateien aber dann wollte ich noch die playlisten laden und das ging überhaupt nicht.
ich suche schon seit tagen nach möglichkeiten habe mir viele findfirst beispiele angeschaut aber ich komme einfach nicht auf den grünen pfad, hier ist mein code der leider alles im in einer ebene anzeigt:
Delphi-Quellcode:
procedure TPlaylisten.LoadDir(dir:String; var t:Boolean);
var
SearchRec: TSearchRec;
DirTemp: String;
begin
if (Assigned(onPlaylisteAdd)) and (GetFilesInDirectory(dir+'\',stdext,true)) then
onPlaylisteAdd(dir,GetPrvDir(dir));
if dir[Length(dir)] <> '\' then dir := dir + '\';
if FindFirst(dir + '*.*', faDirectory, SearchRec) = 0 then begin
repeat
if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then begin
if (SearchRec.Attr and faDirectory > 0)and (GetFilesInDirectory(dir+SearchRec.Name+'\',stdext,true)) then begin
if Assigned(onplaylistnewadd) then onplaylistnewadd(1);
DirTemp :=dir;
dir:=dir + SearchRec.name;
t:=True;
LoadDir(dir,t);
dir := DirTemp;
end;
end
else begin
if (SearchRec.Name[1] <> '.') and (Assigned(onadditem) and (Pos(uppercase(ExtractFileExt(SearchRec.name)),stdext) >0)) {and (pos(uppercase(ExtractFileExt(searchrec.name)),playlistext) > 0)} then
onAddItem(dir+SearchRec.Name,SearchRec.Name);
end;
if SearchRec.Name[1] <> '.' then begin
if (Assigned(onPlaylisteAdd)) and (pos(uppercase(ExtractFileExt(searchRec.name)),playlistext) > 0) then begin
t:=False;
DirTemp :=dir;
dir:=dir + SearchRec.name;
LoadFile(dir,nil,True);
dir := DirTemp;
end
// else begin
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
if Assigned(onPlaylistNewAdd) then onPlaylistNewAdd(2);
end;
// hier sind die ereignise
// Setzt den Hauptkonoten eines Eintrages
procedure TForm2.PlaylistNewAdd(t:Integer);
begin
if t = 0 then parent:=VT.NodeParent[parent];
if t = 1 then begin backupparent:=parent; parent:=VT.NodeParent[parent] end;
if t = 2 then parent:=backupparent;
end; // PlaylistNewAdd
procedure TForm2.PlaylisteAdd(FileName:TFileName; Alias:String);
var
item:TPlaylistItem1;
begin
VT.NodeDataSize:=SizeOf(Titem);
item:=TPlaylistItem1.Create;
item.alias:=alias;item.FileName:=FileName;
parent:=AddVSTObject(vt,parent,item);
end; // PlaylisteAdd
procedure Tform2.AddItem(FileName:TFileName; Alias:String);
var
item:TPlaylistItem1;
begin
if parent <> nil then begin
VT.NodeDataSize:=SizeOf(Titem);
item:=TPlaylistItem1.Create;
item.alias:=alias;item.FileName:=FileName;
AddVSTObject(vt,parent,item);
end;
end;// AddItem
und hier die zuweisungen:
procedure TForm2.FormCreate(Sender: TObject);
begin
backupparent:=NIL;
// wird ausgelöst sobalt ein eintrag zur liste hinzugefügt wird
Form1.Playlisten.onAddItem:=AddItem;
// wird ausgelöst wenn eine playliste geladen wird
Form1.Playlisten.onPlaylisteAdd:=PlaylisteAdd;
// wird ausgefürt wenn eine Neue playliste geladen werden soll
Form1.Playlisten.onPlaylistNewAdd:=PlaylistNewAdd;
// Wird auslöst sobalt nach neuen playlisttypen gesucht wird
Form1.Playlisten.onAddPlaylistTyp:=AddPlaylistTyp;
end;
die ereignise sind für mich wichtig weil ich hätte das ganze gerne universal !
vielen dank im vorraus für tipps bzw. vorschläge !