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 TShellTreeView mit Ordnergrößen (https://www.delphipraxis.net/7455-tshelltreeview-mit-ordnergroessen.html)

Flogo 12. Aug 2003 17:33


TShellTreeView mit Ordnergrößen
 
Ich würde gerne in ein ShellTreeView zu jedem Ordner die Ordnergöße als Node.Data dazuspeichern und komme dabei nicht weiter
Code:
function TForm1.getNodeSize(Node: TTreeNode): Int64;
begin
  if Node.HasChildren then
  begin
    Size := Size + getNodeSize(); //von allen Child-Nodes???
  end
  else
  begin
    Node.Data := DirSize(Node.Text); //soll später die Größe des Ordners auf unterster Ebene liefern
    Result := Node.Data;
  end;
end;
geht das überhaupt so? (rekursiv denken war noch nie meine Stärke)
Wie krieg ich raus was die Childs sind?

Flogo 16. Aug 2003 17:49

Re: TShellTreeView mit Ordnergrößen
 
Ok Ich bin ein Stück weiter gekommen aber es hakt immer noch
Delphi-Quellcode:
function TForm1.getNodeSize(Node: TTreeNode): Int64;
var TempNode: TTreeNode;
    Path: String;
    OldIndex, i: Integer;
begin
  Result := 0;
  if Node.HasChildren then
  begin
    TempNode := Node.GetFirstChild;
    repeat
      Inc(Result, getNodeSize(TempNode));
      TempNode := Node.GetNextChild(TempNode);
    until TempNode = nil;
  end;
  OldIndex := Node.AbsoluteIndex;
  if OldIndex = 0 then Path := ''
  else Path := Node.Text;
  for i := 0 to Node.Level-2 do
  begin
    Path := TreeView.Items[OldIndex].Parent.Text + '\' + Path;
    OldIndex := TreeView.Items[OldIndex].Parent.AbsoluteIndex;
  end;
  Path := TreeView.Root + Path + '\';
  Inc(Result, DirSize(Path));
  Sizes[Node.AbsoluteIndex] := Result;
  Node.Data := @Sizes[Node.AbsoluteIndex];
end;
Das liefert schon ganz gute Ergebnisse nur muss ich hierzu erst alle Einträge ausklappen (FullExpand) und außerdem werden versteckte Ordner nicht berücksichtigt. Wenn ich die versteckten Dateien im TreeView anzeigen lasse stürzt das Programm bei der Berechnung ab und bleibt außerdem an so Sachen wie fehlenden Netzwerkverknüpfungen hängen. Irgendwelche Ideen woran das liegen könnte bzw was man dagegen tun könnte??


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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