![]() |
Order + Dateien in einer VirtualTreeView anzeigen
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:
also root soll das suchverzeichnis eingefügt werden.
verzeichnis1
Dateien.mp3 playliste.m3u inhaltderplayliste weitere dateien.m4a 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:
die ereignise sind für mich wichtig weil ich hätte das ganze gerne universal !
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; vielen dank im vorraus für tipps bzw. vorschläge ! |
Re: Order + Dateien in einer VirtualTreeView anzeigen
Schon mal nach
![]() ![]() |
Re: Order + Dateien in einer VirtualTreeView anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
ja ich hatte nach findfirst + treeview gesucht aber nichts passendes gefunden dein code habe ich auch schongefunden woanders und mit anderen namen.
ich dachte das würde mich auf eine idee bringen wenn ich ihn mir ansehe und habe meine procedure leicht geändert:
Delphi-Quellcode:
ich dachte wenn ich mir den parent sicherer und dann wieder zurück gebe müste es eigetnlich doch gehen und ich habe bei playlisteAdd ja noch eine variable hinzugefügt leider geht das aber trozdem immer noch nicht hier mal ein bild:
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),True); 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; onPlaylistNewAdd(2); 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 onPlaylistNewAdd(1); t:=False; DirTemp :=dir; dir:=dir + SearchRec.name; LoadFile(dir,nil,True); onPlaylistNewAdd(2); dir := DirTemp; end // else begin end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; if Assigned(onPlaylistNewAdd) then onPlaylistNewAdd(2); procedure TForm2.PlaylistNewAdd(t:Integer); begin if t = 1 then backupparent:=GetParentNode(parent); if t = 2 then parent:=backupparent; end; // PlaylistNewAdd procedure TForm2.PlaylisteAdd(FileName:TFileName; Alias:String;ok:Boolean); var item:TPlaylistItem1; begin if ok = True then begin VT.NodeDataSize:=SizeOf(Titem); item:=TPlaylistItem1.Create; item.alias:=alias;item.FileName:=FileName; parent:=AddVSTObject(vt,parent,item); end; end; // PlaylisteAdd jetzt wird alle doppelt angezeigt aber leider werden keine verzeichnise mehr angezeigt ! |
Re: Order + Dateien in einer VirtualTreeView anzeigen
Liste der Anhänge anzeigen (Anzahl: 2)
so ich habe heute das problem glaube ich soweit gelöst im anahng ist ein bild wie ich es mir vorgestellt hatte.
der code befindet sich im anahng als eine pas datei(ihr müst euch wenn ihr ihn braucht das raußkopieren was ihr haben wollt) ich hoffe die unit im anhang hilft irgenjammnd weiter. vielen dank für eure hilfe(besonders luckie(nicht persönlich nehmen*G*))) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz