Hola, ya lo tengo casi... Esto es lo que he hecho:
Variables necesarias:
Código Delphi
[-]
var
MainFrm: TMainFrm;
CurrentDir, FirstPath: String;
Procedimiento para añadir items al TreeView:
Código Delphi
[-]
procedure AddFiles(const Folder: string; Nodes: TTreeNodes;
ParentNode: TTreeNode);
var
AFolder: TSearchRec;
NewNode: TTreeNode;
i: Integer;
begin
if FindFirst(Folder + '*.*', faDirectory, AFolder) = 0 then
repeat
if (AFolder.Name <> '.') and (AFolder.Name <> '..') then
begin
if ParentNode <> nil then
begin
for i := 0 to ParentNode.Count-1 do
[i] if (ParentNode.Item.Text = AFolder.Name) then
begin
ParentNode.Item[i].Delete;
end;
end;
NewNode := Nodes.AddChild(ParentNode, AFolder.Name);
AddFiles(IncludeTrailingPathDelimiter(Folder+AFolder.Name) +
'*.*', Nodes, NewNode);
end;
until FindNext(AFolder) <> 0;
FindClose(AFolder);
end;
Procedimiento OnExpand del TreeView1:
Código Delphi
[-]
procedure TMainFrm.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
i: Integer;
begin
CurrentDir := FirstPath;
for i := Node.Level downto 0 do
if i = 0 then
CurrentDir := CurrentDir+Node.Text+'\'
else
CurrentDir := CurrentDir+Node.Parent.Text+'\';
ShowMessage(CurrentDir);
AddFiles(CurrentDir,TreeView1.Items,Node);
end;
...y para llamar-lo:
Código Delphi
[-]
procedure TMainFrm.NewRegisterClick(Sender: TObject);
begin
TreeView1.Items.Clear;
AddFiles('E:\Mis Documentos\Mis archivos recibidos\', TreeView1.Items, nil);
FirstPath := ('E:\Mis Documentos\Mis archivos recibidos\');
end;
Bueno, ahora el problema está en que me hace una excepción en algunos casos: "List index out of bounds (0)" en la línia:
[i]if (ParentNode.Item.Text = AFolder.Name) then en el procedimient AddFiles.
Como puedo arreglar esto, no sé porqué hace este error...