Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TreeView und ListView (https://www.delphipraxis.net/99376-treeview-und-listview.html)

SMALLID 11. Sep 2007 13:33

Re: TreeView und ListView
 
Wie Andreas schon sagt ist der eleganteste Weg einfach das Design (+/-, etc.) der schon vorhandenen Komponenten zu ändern.

Wenn es mit ShellCtrl nicht klappt kannst du mit FindFirst, FindNext, etc. arbeiten. Dort kannst du nämlich auch gleich angeben, ob du Ordner includen willst oder nicht.

Bsp.-Quellcode zum Selbststudium:

Delphi-Quellcode:
var
  SearchRec: TSearchRec;
procedure TForm1.SearchClick(Sender: TObject);
begin
  FindFirst('c:\Program Files\MyProgram\bin\

*.*', faAnyFile, SearchRec);
  Label1.Caption := SearchRec.Name + ' is ' + IntToStr(SearchRec.Size) + " bytes in size';
end;
procedure TForm1.AgainClick(Sender: TObject);
begin
  if FindNext(SearchRec) = 0 then
    Label1.Caption := SearchRec.Name + ' is ' + IntToStr(SearchRec.Size) + ' bytes in size'
  else
    FindClose(SearchRec);
end;
Wenn du in der Hilfe mal nach "Dateien" suchst und den Filter auf DevStudio für Win32 setzt, danna auf "Methoden zur Ein-/Ausgabe" klickst und noch ein bissl rumsuchst, findest du eine ganze Anleitung dazu.

Ansonsten wie gesagt die schon vorhandenen Komponenten anpassen. Und bei Fragen nochmal posten :)

Malte Koch 11. Sep 2007 13:43

Re: TreeView und ListView
 
Hier ist die Prozedur die die Verzeichnisse ausliest. Jetzt ist die Frage, ob ich hier auch die Dateien schon suche oder ob ich dafür ne eigene Prozedur schreibe, die nur beim Klick auf den ausgegebenen Ordner ausgeführt wird.

Delphi-Quellcode:
procedure TForm2.HoleVerzeichnisse(const Pfad: String; var Tree: TTreeView;var ListView: TListView; Start: TTreeNode);
var
 SR: TSearchRec;

  begin
    if FindFirst(Pfad + '\*.*', faAnyFile, SR) = 0 then
  repeat
    Application.ProcessMessages;
    if (SR.Attr AND faDirectory = faDirectory) AND (SR.Name[1] <> '.')
        AND (SR.Name[1] <> '_') then
    begin
        baum := Tree.Items.Addchild(Start, SR.Name);
        baum.ImageIndex := 1;
        baum.StateIndex := 2;
        HoleVerzeichnisse(Pfad + '\' + SR.Name, Tree, ListView, Baum);
      end;
  until (FindNext(SR) <> 0);
  SysUtils.FindClose(SR);
  end;

SMALLID 11. Sep 2007 14:11

Re: TreeView und ListView
 
Du machst beim OnClik des treeviews eine Art "HoleDateien" mit den gleichen Parametern. Die schreibt dann die Elemente von "Pfad" (also dem aus dem Item und den Überitems zusammengesetzten String des TreeViews) wo (SR.Attr AND NOT faDirectory = faAnyFile) und schreibt die in den ListView.

Malte Koch 11. Sep 2007 14:30

Re: TreeView und ListView
 
1. Muss ich OnClick oder OnChange nehmen?

2. Wie komm ich in der Funktion an den Pfad dran? Also wie kann ich auslesen was ich angeklickt habe?

Malte Koch 11. Sep 2007 15:05

Re: TreeView und ListView
 
So sieht meine Prozedur bis jetzt aus. Jedoch weis ich nicht genau wie ich denn jetzt den Namen in das Item packe.

Ihr wisst was ich meine??

Delphi-Quellcode:
procedure TForm2.HoleDateien(const Pfad: String);
var
 SR: TSearchRec;
  begin
    if FindFirst(Pfad + '\*.*', faAnyFile, SR) = 0 then
  repeat
    Application.ProcessMessages;
    if (SR.Attr OR faAnyfile = faAnyFile) AND (SR.Name[1] <> '.')
        AND (SR.Name[1] <> '_') then
    begin
         ListView1.Items.Add ;
         ListItem.Caption := (SR.Name);

        baum.ImageIndex := 1;
        baum.StateIndex := 2;
        HoleDateien(Pfad);
      end;
  until (FindNext(SR) <> 0);
  SysUtils.FindClose(SR);
  end;

Mackhack 11. Sep 2007 15:32

Re: TreeView und ListView
 
Hier hab ich dir mal ein uraltes Beispiel das dir auch deine +/- Anzeigt vor den Eintraegen im Treeview!

Delphi-Quellcode:
procedure Verzeichnisse_Einlesen(Tree : TTreeView; Verzeichnis : String; Eintrag : TTreeNode; Mit_Dateien : Boolean);
Var
  SearchRec  : TSearchRec;
  EintragTemp : TTreeNode;
  List       : TStringList;
  Buf        : String;
  I          : Integer;
Begin
  Tree.Items.BeginUpdate;
  List:= TStringList.Create;
  If Verzeichnis[Length(Verzeichnis)] <> '\' Then
  Begin
    Verzeichnis:= Verzeichnis + '\';
  End;
  If FindFirst(Verzeichnis + '*.*', faDirectory, SearchRec) = 0 Then
  Begin
    Repeat
      If (SearchRec.Attr And faDirectory = faDirectory) And (SearchRec.Name[1] <> '.') Then
      Begin
        //Eintrag ist ein Verzeichnis
        If (SearchRec.Attr And faDirectory > 0) Then
        Begin
          //zum aktuellen Eintrag hinzufügen
          Eintrag:= Tree.Items.AddChild(Eintrag, SearchRec.Name);
          EintragTemp:= Tree.Items.Add(Nil, Buf);
          EintragTemp.ImageIndex   := 0; //Ummarkiert
          EintragTemp.SelectedIndex := 0; //Markiert
          EintragTemp.StateIndex   := -1;
          //Eintrag merken
          EintragTemp:= Eintrag.Parent;
          //auf Untereinträge prüfen
          Verzeichnisse_Einlesen(Tree, Verzeichnis + SearchRec.Name, Eintrag, Mit_Dateien);
          //Eintrag wiederholen
          Eintrag:= EintragTemp;
        End
        Else
          //Eintrag ist eine Datei
          If Mit_Dateien Then
          Begin
            If (SearchRec.Name[1] <> '.') And (SearchRec.Name[1] <> '..') Then
            Begin
              Tree.Items.AddChild(Eintrag, SearchRec.Name);
              Eintrag:= Tree.Items.Add(Nil, SearchRec.Name);
              EintragTemp:= Tree.Items.Add(Nil, List.Strings[I]);
              EintragTemp.ImageIndex   := 2; //Ummarkiert
              EintragTemp.SelectedIndex := 2; //Markiert
              EintragTemp.StateIndex   := -1;
            End;
          End;
        End;
    Until FindNext(SearchRec) <> 0;
    FindClose(SearchRec);
  End;
  Tree.Items.EndUpdate;
End;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TreeView1.Items.Clear;
  Verzeichnisse_Einlesen(TreeView1, Edit2.Text, Nil, False);
end;

Malte Koch 12. Sep 2007 07:43

Re: TreeView und ListView
 
Ich hab es ja jetzt auch schon so, dass er mir das + und - anzeigt. Ich habe halt nur nen problem, dass er mir die Dateien aus den Ordnern in einem ListView anzeigt.

Matze 12. Sep 2007 08:18

Re: TreeView und ListView
 
Ich mache das immer so:

Delphi-Quellcode:
var MyItem: TListItem;

MyItem := ListView.Items.Add;
MyItem.ImageIndex := EinIndex;
MyItem.Caption := 'Inhalt der 1. Spalte';
MyItem.SubItems.Add('Inhalt der 2. Spalte');
MyItem.SubItems.Add('Inhalt der 3. Spalte');

Malte Koch 12. Sep 2007 14:49

Re: TreeView und ListView
 
Ich habe das jetzt hinbekommen.

Leider kann ich im moment nur die Dateien anzeigen die sich hinter dem ersten knoten verbergen.

Was muss ich denn ändern, damit der komplette Pfad mitübergeben wird?

Mackhack 12. Sep 2007 15:24

Re: TreeView und ListView
 
Zitat:

Zitat von Malte Koch
Ich habe das jetzt hinbekommen.

Leider kann ich im moment nur die Dateien anzeigen die sich hinter dem ersten knoten verbergen.

Was muss ich denn ändern, damit der komplette Pfad mitübergeben wird?

Zeig doch ein wenig Code dann kann man dir auch sagen warum du nur die Daten des ersten Knoten angezeigt bekommst!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Seite 2 von 4     12 34      

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