*Function TVLister Lparameters toTV Local lnIndex,lnLastIndex _Cliptext='' With toTV lnIndex = .Nodes(1).Root.FirstSibling.Index lnLastIndex = .Nodes(1).Root.LastSibling.Index _GetSubNodes(lnIndex,toTV,lnIndex) Do While lnIndex # lnLastIndex lnIndex = .Nodes(lnIndex).Next.Index _GetSubNodes(lnIndex,toTV,lnIndex) Enddo EndWith Return _Cliptext Function _GetSubNodes Lparameters tnIndex, toTV, tnRootIndex Local lnIndex, lnLastIndex With toTV WriteNode(tnIndex,toTV, tnRootIndex) If .Nodes(tnIndex).Children > 0 lnIndex = .Nodes(tnIndex).Child.Index lnLastIndex = .Nodes(tnIndex).Child.LastSibling.Index _GetSubNodes(lnIndex,toTV,tnRootIndex) Do While lnIndex # lnLastIndex lnIndex = .Nodes(lnIndex).Next.Index _GetSubNodes(lnIndex,toTV,tnRootIndex) Enddo Endif Endwith Function WriteNode Lparameters tnCurIndex, toTV,tnRootIndex Local lnRootIndex, lnIndex, lcPrefix, lcKey, lnLevel lnIndex = tnCurIndex With toTV lcPrefix = '+-' + .Nodes(lnIndex).Text lnLevel = 0 Do While lnIndex # tnRootIndex lnIndex = .Nodes(lnIndex).Parent.Index lcPrefix = Iif(.Nodes(lnIndex).LastSibling.Index = lnIndex,' ','|')+Space(3)+lcPrefix lnLevel = lnLevel + 1 EndDo _Cliptext = _Cliptext + lcPrefix + Chr(13) EndwithCetin