Hallo miteinander,
ich bin einwenig verzweifelt. In der
Unit meines Hauptformulars habe ich ein IdFTP-Objekt (
Indy 10) und ich möchte damit einen Verzeichnisbaum in einem TTreeView-Objekt in einem anderen Formular erstellen.
Klappt eigentlich(!) auch wunderbar, indem ich aus dem Hauptformular rekursiv das IdFTP-Objekt anzapfe und die Ordner dann in das andere Formular übertrage.
Hier mal die beiden wichtigsten Funktionen dazu:
Code:
function ListDirs(var IdFTP : TIdFTP) : TStringList;
* var
* * StrFTP : TStringList;
* * i : integer;
begin
* StrFTP := TStringList.Create;
* IdFTP.List(StrFTP, '', false);
* for i := (StrFTP.Count - 1) downto 0 do
* * if (StrFTP.Strings[i] = '') or
* * * *(StrFTP.Strings[i] = '.') or
* * * *(StrFTP.Strings[i] = '..') or
* * * *(Pos('.', StrFTP.Strings[i]) <> 0) then
* * * StrFTP.Delete(i);
* ListDirs := StrFTP;
end;
procedure FillTree(parent : TTreenode; var Tree : TTreeView; var IdFTP : TIdFTP);
* var
* * StrFTP : TStringList;
* * Node : TTreeNode;
* * i : integer;
begin
* try
* * StrFTP := ListDirs(IdFTP);
* except
* * exit;
* end;
* for i := 0 to StrFTP.Count - 1 do
* begin
* * Node := Tree.Items.AddChild(parent, StrFTP.Strings[i]);
* * IdFTP.ChangeDir(Node.Text);
* * FillTree(Node, Tree, IdFTP);
* * IdFTP.ChangeDirUp;
* end;
end;
Leider dauert das ganze bei vielen Ordnern verdammt lange! Also hatte ich mir überlegt, ich lade einfach bei Bedarf, also bei jedem "Anklicken eines Knotens" (onChange) in der Treeview, die entsprechenden Unterordner hinzu. Und jetzt tritt das eigentliche Problem auf:
Ich kriege ums Verrecken keinen Zugriff aus dem zweiten Formular auf das IdFTP-Objekt in der Hauptunit, sodass ich darauf Operationen wie ChangeDir anwenden könnte (Kommt immer Zugriffsverletzung, etc.)!
Ich bräuchte also entweder eine Lösung, die das Auflisten der Ordnerstruktur performanter, oder den problemlosen Zugriff auf das IdFTP-Objekt aus anderen Units ermöglicht.
Bin für jeden Lösungsvorschlag dankbar!
Gruß,
Lucas