Listar no treeView diretorios do ftp conforme for expandindo.

Delphi

07/10/2015

Boa tarde. Como ir listando os diretórios de um ftp no treeview conforme eu for expandindo?
Tenho essas duas funções mas ela lista todos de uma vez. Assim fica lento.Então o ideal seria ir carregando conforme eu for expandindo.
function TdlgPedidosExternosSincronizar.lista(IdFTP: TIdFTP; port: integer;
  host, user, senha: string; TreeView: TTreeView): boolean;
var
    Node: TTreeNode;
begin
   Node := nil;
   TreeView.Items.Clear;
   IdFTP.host := host;
   IdFTP.port := port;
   IdFTP.Username := user;
   IdFTP.Password := senha;
   try
      IdFTP.Connect;
      listaSub(IdFTP, '/', Node, TreeView);
   finally
      IdFTP.DisconnectNotifyPeer;
   end;
end;

function TdlgPedidosExternosSincronizar.listaSub(IdFTP: TIdFTP;
  diretorio: string; NodeRaiz: TTreeNode; TreeView: TTreeView): boolean;
var
   I: Integer;
   ListItems: TIdFTPListItems;
   Node: TTreeNode;
   Nome: string;
begin

   if IdFTP.Connected then
   begin

      Node := NodeRaiz;
      IdFTP.ChangeDir(diretorio);
      IdFTP.List;
      ListItems := TIdFTPListItems.Create;
      ListItems.Assign(IdFTP.DirectoryListing);
      for I := 0 to ListItems.Count - 1 do
      begin

         Nome := ListItems.Items[I].LocalFileName;
         NodeRaiz := TreeView.Items.AddChild(Node, Nome);
         if(ListItems.Items[I].ItemType = ditDirectory) then
         begin

            listaSub(IdFTP, diretorio + Nome + '/', NodeRaiz, TreeView);
            NodeRaiz := Node;
         end;

      end;
      ListItems.Free;
   end;
end;


Fico no aguardo.
Obrigado.
Marcelo Urso

Marcelo Urso

Curtidas 0
POSTAR