AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Order + Dateien in einer VirtualTreeView anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Order + Dateien in einer VirtualTreeView anzeigen

Ein Thema von mimi · begonnen am 18. Okt 2006 · letzter Beitrag vom 19. Okt 2006
Antwort Antwort
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Order + Dateien in einer VirtualTreeView anzeigen

  Alt 18. Okt 2006, 12:56
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 !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Order + Dateien in einer VirtualTreeView anzeigen

  Alt 18. Okt 2006, 13:02
Schon mal nach Hier im Forum suchenfindfirst treeview gesucht? da findet man dann unteranderem das:
http://www.delphipraxis.net/internal...first+treeview
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Order + Dateien in einer VirtualTreeView anzeigen

  Alt 18. Okt 2006, 15:33
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 !
Miniaturansicht angehängter Grafiken
unbenannt_138.jpg  
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Order + Dateien in einer VirtualTreeView anzeigen

  Alt 19. Okt 2006, 16:05
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*)))
Miniaturansicht angehängter Grafiken
unbenannt_272.jpg  
Angehängte Dateien
Dateityp: pas df1_117.pas (5,4 KB, 16x aufgerufen)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 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