Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Order + Dateien in einer VirtualTreeView anzeigen (https://www.delphipraxis.net/79219-order-dateien-einer-virtualtreeview-anzeigen.html)

mimi 18. Okt 2006 11:56


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:
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 !

Luckie 18. Okt 2006 12:02

Re: Order + Dateien in einer VirtualTreeView anzeigen
 
Schon mal nach Hier im Forum suchenfindfirst treeview gesucht? da findet man dann unteranderem das:
http://www.delphipraxis.net/internal...first+treeview

mimi 18. Okt 2006 14:33

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:
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
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:

jetzt wird alle doppelt angezeigt aber leider werden keine verzeichnise mehr angezeigt !

mimi 19. Okt 2006 15:05

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 07:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz