Schlanker mag es aussehn, aber dafür sind dort mehrere Prozeduraufrufe und Rückprünge drin und es wird ein klein bissl mehr Speicher benötigt.
Delphi-Quellcode:
function GetNodePath(aNode:TTreeNode; WithTailingDelimiter: Boolean): String;
begin
Result := '';
while Assigned(aNode) do begin
Result := aNode.Text + '\' + Result;
aNode := aNode.Parent;
end;
if not WithDelimiter then Delete(Result, Length(Result), 1);
end;
// falls aNode nie NIL ist, dann auch so möglich
function GetNodePath(aNode:TTreeNode; WithTailingDelimiter: Boolean): String;
begin
if WithDelimiter then Result := aNode.Text + '\' else Result := aNode.Text;
aNode := aNode.Parent;
while assigned(aNode) do begin
Result := aNode.Text + '\' + Result;
aNode := aNode.Parent;
end;
end;
ach ja, .Parent ruft .GetParent auf, was wiederum intern einiges macht ... drum hab ich das in der Schleife nur noch einmal drin.
Zitat von
Satty67:
Wie implementiere ich die Aufgabe, manche Node mit und mache ohne abschließenden '\' zu liefern? Außerhalb lösen?
Delphi-Quellcode:
function GetNodePath(Node: TTreeNode; WithTailingDelimiter: Boolean): String;
begin
if Assigned(Node) then begin
if WithTailingDelimiter then
Result := GetNodePath(Node.Parent, True) + Node.Text + '\'
else Result := GetNodePath(Node.Parent, True) + Node.Text;
end else Result := '';
end;
// oder
function GetNodePath(Node: TTreeNode; WithTailingDelimiter: Boolean): String;
begin
if Assigned(Node) then begin
Result := GetNodePath(Node.Parent, True) + Node.Text;
if WithTailingDelimiter then Result := Result + '\';
end else Result := '';
end;