Die Funktion bildet eine ganze TTreeView in einem TMemo ab, oder nur die gewünschte Anzahl Ebenen.
Der Aufruf ist dementsprechend einfach:
Delphi-Quellcode:
// Stellt die ersten 3 Ebenen des TreeView1 in Memo1 dar.
ForceTreeToMemo(TreeView1, Memo1.Lines, 3);
Der Parameter "Layers" ist optional. Wird er nicht mitgegeben, oder -1 übergeben, dann
wird die gesamte TreeView mit sämtlichen Unterknoten dargestellt.
Delphi-Quellcode:
procedure TForm1.ForceTreeToList(Tree:TTreeView; Lines:TStrings; Layers:Integer=-1);
const
// Verschiedene Zeichen für die Darstellung definieren
strSpace1 : String = '| ';
strSpace2 : String = ' + - ';
strSpace3 : String = ' ';
strSpace4 : String = ' - ';
procedure ForceChilds(fNode:TTreeNode; strSpace:String; fLayer:Integer);
var
fChild:TTreeNode;
begin
// Für jeden Knoten und dessen Unterknoten wird ein Eintrag in
// die Liste geschrieben. Um dies rekursiv zu machen, ruft sich die
// Funktion selber wieder auf wenn ein weiterer Knoten mit Unterknoten
// gefunden wurde. Aber immer nur solange bis die Anzahl Layers erreicht
// wurde.
if (assigned(fNode)) and ((fLayer < Layers) or (Layers = -1)) then
begin
Inc(fLayer);
if (fNode.HasChildren) then
begin
// Schreibt in die Liste mit dem entsprechenden "grafischen" prefix
Lines.Add(strSpace + strSpace2 + fNode.Text);
strSpace := strSpace + strSpace3;
fChild:=fNode.getFirstChild;
repeat
ForceChilds(fChild,strSpace,fLayer);
fChild:=fChild.getNextSibling;
until not assigned(fChild);
end
else
// Schreibt in die Liste mit dem entsprechenden "grafischen" prefix
Lines.Add(strSpace + strSpace4 + fNode.Text);
end;
end;
var
Node: TTreeNode;
begin
// Für die Hauptknoten wird jeweils die Funktion ForceChilds aufgerufen.
with tree.Items do
begin
BeginUpdate;
Node := GetFirstNode;
while Assigned(node) do
begin
ForceChilds(Node,strSpace1,0);
Node := Node.getNextSibling;
end;
EndUpdate;
end;
end;
Viel Spass damit!
Liebe Grüsse #enemyleft
[EDIT]Habe den Funktionsparameter Memo in TStrings geändert. Danke shmia[/EDIT]