PUBLIC ofrm
RAND(-1)
ofrm=CREATEOBJECT("MyForm")
ofrm.show()
DEFINE CLASS MyForm as Form
width=800
height=420
cCurList=SYS(2015)
ADD OBJECT lbl as label WITH left = 450, caption = "Search node"
ADD OBJECT txt as textbox WITH left = 450, top = 20
ADD OBJECT lbl2 as label WITH left = 600, caption = "from level"
ADD OBJECT txt2 as textbox WITH left = 600, top = 20, value = 1
ADD OBJECT cmd as commandbutton WITH left = 450, top = 50, caption = "Find"
ADD OBJECT teeview as olecontrol WITH oleclass="Mscomctllib.treectrl.2",width=400,height=400
PROCEDURE trav
LPARAMETERS loNode,lncurLevel,lnDesiredLevel,lcString,llAllChild
LOCAL loChild
DO CASE
CASE m.lncurLevel < m.lnDesiredLevel
DO CASE
CASE m.loNode.children > 0 AND !m.llAllChild
loChild = m.loNode.Child
ThisForm.trav(m.loChild, m.lncurLevel + 1, m.lnDesiredLevel, m.lcString, .F.)
DO WHILE TYPE("m.loChild.Next") == "O" AND !ISNULL(m.loChild.Next)
ThisForm.trav(m.loChild.Next, m.lncurLevel + 1, m.lnDesiredLevel, m.lcString, .F.)
loChild = m.loChild.Next
ENDDO
CASE m.lncurLevel > 0
ThisForm.trav(m.loNode.Parent, m.lncurLevel -1, m.lnDesiredLevel, m.lcString, .T.)
ENDCASE
CASE m.lncurLevel = m.lnDesiredLevel
IF UPPER(ALLTRIM(m.loNode.text)) == UPPER(ALLTRIM(m.lcString))
m.loNode.Selected = .T.
* m.loNode.EnsureVisible()
ThisForm.trav(m.loNode.Root, 0, m.lnDesiredLevel, m.lcString, .T.)
ENDIF
ENDCASE
ENDPROC
PROCEDURE cmd.click
ThisForm.trav(ThisForm.teeview.Nodes[1].Root,0,ThisForm.txt2.value,ThisForm.txt.Value,.F.)
ENDPROC
PROCEDURE init
LOCAL lcKey,loNode,lcRoot,lcPar1,lcPar2,lcPar3,lcPar4,ln1,ln2,ln3,ln4,ln5
STORE SYS(2015) TO lcRoot, lcKey
loNode = thisform.TeeView.Nodes.Add(, 1, m.lcKey,'Root')
loNode.expanded = .T.
FOR ln1 = 1 TO INT(9 * RAND()) + 1
lcPar1 = SYS(2015)
loNode = thisform.TeeView.Nodes.Add(m.lcRoot, 4, m.lcPar1,"L1N" + TRANSFORM(m.ln1))
loNode.expanded = .T.
FOR ln2 = 1 TO INT(5 * RAND()) + 1
lcPar2 = SYS(2015)
loNode = thisform.TeeView.Nodes.Add(m.lcPar1, 4, m.lcPar2,"L2N" + TRANSFORM(m.ln1) + TRANSFORM(m.ln2))
loNode.expanded = .T.
FOR ln3 = 1 TO INT(5 * RAND()) + 1
lcPar3 = SYS(2015)
loNode = thisform.TeeView.Nodes.Add(m.lcPar2, 4, m.lcPar3,"L3N" + TRANSFORM(m.ln1) + TRANSFORM(m.ln2) + TRANSFORM(m.ln3))
loNode.expanded = .T.
FOR ln4 = 1 TO INT(5 * RAND()) + 1
lcPar4 = SYS(2015)
loNode = thisform.TeeView.Nodes.Add(m.lcPar3, 4, m.lcPar4,"L4N" + TRANSFORM(m.ln1) + TRANSFORM(m.ln2) + TRANSFORM(m.ln3) + TRANSFORM(m.ln4))
loNode.expanded = .T.
FOR ln5 = 1 TO INT(5 * RAND()) + 1
lcKey = SYS(2015)
loNode = thisform.TeeView.Nodes.Add(m.lcPar4, 4, m.lcKey,"L5N" + TRANSFORM(m.ln1) + TRANSFORM(m.ln2) + TRANSFORM(m.ln3) + TRANSFORM(m.ln4) + TRANSFORM(m.ln5))
loNode.expanded = .T.
NEXT
NEXT
NEXT
NEXT
NEXT
ENDPROC
ENDDEFINE