Windows Explorer mit TreeView und ListView



  • Hi,

    ich bin noch nicht lang dabei, hoff hier kann mir jemand helfen.

    Ich würde gern für eine Anwendung eine Art Windows Explorer selbst schreiben! Nur wie bekomm ich es hin, dass in meinem TreeView die Verzeichnisse und wenn man ein Verzeichnis anklickt, dann in einem ListView die Dateien des jeweiligen Verzeichnisses zu sehen sind?

    Danke für eure Hilfe im Vorraus schon mal!

    Gruß Thorsten



  • Du könntest auch DirectoryListBox und FileListBox benutzen, oder willst du das aus Übungsgründen alles selber machen?

    Sorry, wenn ich Unsinn poste 🙄



  • hallo,

    also das pure anzeigen ist mit den neuen activeX kompos TShellTreeView und TShellListView pipi, bei auf form platzieren vier, fünf einstellungen im objektinspektor und du kannst wie im explorer durch die dateien browsen, auch so ziemlich alles andere ist in den kompos gekapselt.

    selber bauen (wenn man diese kompos z. b. nicht hat) ist etwas ganz anderes, da hat man es nämlich dann mit tausend problemen zu tun. erst mal die anzeige, gut dafür könnte man die antiquierten kompos aus dem 3.1 register nehmen (TFileListBox, TDirectoryListBox), aber die passen schon vom design nicht mehr so recht in eine neue anwendung, und die bedienung war anno dazumal auch noch ganz anders.

    die kombination TTreeView und TListView (TreeView zur linken Baumanzeige und die ListView als Inhaltsanzeige) ist sehr flexibel und dürfte keine wünsche offen lassen. allerdings ist handarbeit angesagt, ohne ende. die anzeige der dateien und verzeichnisse mit den gewohnten symbolen ist ein teil (noch relativ schnell machbar), dann sollten aber auch solche dinge wie hintergrundaktualisierung und so funktionieren, da wird man dann mit treads arbeiten...

    mfg
    murphy



  • hi,

    also ich wollte es schon mit einem TreeView und einem ListView machen! So, dass im TreeView die Ordner dargestellt werden und wenn ich auf einen Ordner klicke, dann sollen im ListView nur die Dateien die sich im angeklickten Ordner befinden angezeigt werden!

    Hat den niemand ein bischen Beispiel-Code oder ähnliche sfür mich? Wäre sehr dankbar!

    Gruß



  • hi,

    ok, ich hab schon mal einiges selbst hinbekommen mittlerweile. Das einzigste Problem, das ich noch hab ist, wenn ich im TreeView einen Ordner anklicken, dann schreibt er mir ab diesem Verzeichnis alle Dateien in meinen ListView.

    Ich will aber nur die Dateien, die sich in diesem Verzeichnis befinden in meinem ListView haben ohne Ordner die auch in dem Verzeichnis liegen!#

    Hoff hierbei kannmir einer helfen!

    Gruß



  • hi,

    um hierfür ne antwort zu erhalten ist der source nötig und eine genaus erläuterung was wann geschehen soll...

    mfg
    murph



  • Hi,

    also habs mal hinbekommen. Hier der Code:

    void __fastcall TForm1::TreeViewClick(TObject *Sender)
    {
       //Pfad des angeklickten Files erstellen
       TPoint p = Mouse->CursorPos;
       p = TreeView->ScreenToClient(p);
    
       TTreeNode *Node = TreeView->GetNodeAt(p.x, p.y);
    
       //Pfad im TreeView holen
       AnsiString aDirPath = TreePath(Node, m_logRegKey.get_String("BasisPath"));
       if(aDirPath.IsEmpty())
          return;
    
       //ListViewFiles clear()
       ListViewFiles->Items->Clear();
    
       //Dateien aus geklicktem Ordner in ListViewFile laden
          DIR *dir;
       char cSubDir[255];
       struct dirent *sdirname;
    
       //Verzeichnis Schritt für Schritt auslesen
       if((dir = opendir(aDirPath.c_str())) != NULL)
       {
          while((sdirname = readdir(dir)) != NULL)
          {
             if(strcmp(sdirname->d_name, ".") && strcmp(sdirname->d_name, ".."))
             {
                AnsiString sTest = sdirname->d_name;
                if((sTest.Pos(".log")) != 0 || (sTest.Pos(".txt")) != 0  
                   || (sTest.Pos(".ini")) != 0)
                {
                   TListItem *ListItem = ListViewFiles->Items->Add();
                   ListItem->Caption = sdirname->d_name;
                }
    
                strcpy(cSubDir, aDirPath.c_str());
                strcat(cSubDir, "\\");
                strcat(cSubDir, sdirname->d_name);
             }
          }
          closedir(dir);
       }
    }
    

    Also ich will ja dann nur .txt , .log und .ini -Files angezeigt bekommen. Das klappt ja auch mittlerweile wie ich es will! Nur beim Root-Ordner im ListView, also bei obersten Ordner im TreeView. Der reagiert irgendwie nicht auf den Click! Warum hab ich keine Ahnung!

    Dann hab ich noch ein Problem, ich möchte die Files mit Icon anzeigen nur leider klappt das nur wenn ich meine ImageList vorher mit Icon manuell fülle und dann dem ListItem den Index des Images zuordne! Geht das auch automatisch oder kann man da nichts machen!

    Gruß



  • Was ist TreePath für ne Funktion? 😕

    ...egal, was ich finde: je mehr ich es brauche, desto mehr ist es kaputt... 😞



  • Plemplem schrieb:

    Was ist TreePath für ne Funktion?

    Offenbar eine Funktion, die aus der Registry oder sonstwoher, ist ja für die Funktionalität unwichtig, ein Startverzeichnis für die nachfolgende Darstellung übergibt. Da könnte also genauso aDirPath = "c:\" stehen.



  • Ach so? Na dann... 😞
    Nee, bei dem Code komm ich nicht mit. Diese Char-Funktionen, dauernd 2 Anweisungen auf einmal... Ich glaub das versuch ich doch selber. Zum nachschlagen reicht's ja.
    Danke!


Log in to reply