insertNameTreeSelectedItem:
comboGetTxt 201
mov [tvins.item.mask],TVIF_TEXT
mov [tvins.item.cchTextMax], maxTxtLenn
mov [tvins.item.pszText],comboTxt 
invoke GetDlgItem,esi,1
mov [treeHwnd],eax
invoke SendMessage,eax,TVM_GETNEXTITEM,TVGN_CARET, 0 ;TVGN_NEXTVISIBLE  TVGN_FIRSTVISIBLE TVGN_CARET

;invoke SendMessage,eax,TVM_GETNEXTITEM,TVGN_PARENT, 0
mov  [tvins.hParent],eax
invoke SendMessage,[treeHwnd],TVM_INSERTITEM, 0, tvins
;invoke UpdateWindow,[treeHwnd] ;send wm_paint not help
xor ecx,ecx
ret

reNameTreeSelectedItem:
comboGetTxt 201
mov [tvi.mask],TVIF_TEXT;+TVIF_HANDLE
mov [tvi.cchTextMax], maxTxtLenn
mov [tvi.pszText],comboTxt 
invoke GetDlgItem,esi,1
mov [treeHwnd],eax
invoke SendMessage,eax,TVM_GETNEXTITEM,TVGN_CARET, 0 ;TVGN_NEXTVISIBLE  TVGN_FIRSTVISIBLE TVGN_CARET
mov [tvi.hItem],eax
invoke SendMessage,[treeHwnd],TVM_SETITEMA, 0, tvi
xor ecx,ecx
ret

delTreeSelectedItem:
mov [tvi.mask],TVIF_TEXT;+TVIF_HANDLE
mov [tvi.cchTextMax], 50
;mov [tvi.pszText],.tt
invoke GetDlgItem,esi,1
mov [treeHwnd],eax
invoke SendMessage,eax,TVM_GETNEXTITEM,TVGN_CARET, 0 ;TVGN_NEXTVISIBLE  TVGN_FIRSTVISIBLE TVGN_CARET
mov [tvi.hItem],eax
invoke SendMessage,[treeHwnd],TVM_DELETEITEM,0,[tvi.hItem]
xor ecx,ecx
ret

GetStructNamesok: call saveStruct
        invoke GetDlgItem,esi,1
        mov [treeHwnd],eax
rept 0 {
invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_ROOT,0  ;get first tree element
invoke SendMessage,[treeHwnd],TVM_EXPAND,TVE_EXPAND+TVE_EXPANDPARTIAL,eax	;TOGGLE
}

        ;invoke SendMessage,eax,TVM_GETCOUNT,0,0
        ;inc eax
        ;mov [treeNumItems],eax
;cinvoke sprintf,Status+1000,'%d',eax
;Msg Status+1000

        mov [tvi.cChildren], 0
        mov edi,Status
        mov [tvi.mask],TVIF_TEXT
        mov [tvi.cchTextMax], maxTxtLenn ;ne date real size! Vsegda ostaetca maxTxtLenn
        mov [tvi.pszText],edi

        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_ROOT,0  ;get first tree element
.uu:    mov [tvi.hItem],eax
        invoke SendMessage,[treeHwnd],TVM_GETITEMA, 0, tvi

        Msg edi

;get childrns
        mov ebx, [tvi.hItem]
.nnx:
        mov [tvi.mask],TVIF_TEXT+TVIF_CHILDREN
        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_CHILD,[tvi.hItem]
        mov [tvi.hItem],eax
        test eax,eax
        jz .done
.10:
        invoke SendMessage,[treeHwnd],TVM_GETITEMA, 0, tvi
        ;dec [treeNumItems]
        ;jz  .ll
        cmp [tvi.cChildren],1
        jnz .oo
        Msg edi	;potom nado snova vernutca na etot [tvi.hItem] inache ne budget names druhih childrens
        jmp .nnx
.oo:
        mov esi,eax
        Msg edi
        mov word [edi],0
        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_NEXT,[tvi.hItem]
        mov [tvi.hItem],eax
        test esi,esi
        jnz .10
;mov [tvi.hItem],ebx
;jmp .nnx
.done:
        mov [tvi.mask],TVIF_TEXT
        mov     [tvi.cChildren], 0
        mov [tvi.hItem],ebx
        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_NEXT,[tvi.hItem]
        test eax,eax
        jnz  .uu
.ll:	call EndSaveStruct
        xor ecx,ecx
        ret

GetStructNames:
        invoke GetDlgItem,esi,1
        mov [treeHwnd],eax
        mov [tvi.cChildren], 0
        mov edi,Status
        mov [tvi.mask],TVIF_TEXT
        mov [tvi.cchTextMax], maxTxtLenn ;ne date real size! Vsegda ostaetca maxTxtLenn
        mov [tvi.pszText],edi

        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_ROOT,0
        push eax
        call travers
        xor ecx,ecx
ret

proc travers  hItem:dword
     mov eax, [hItem]
     test eax,eax
     jz  .ext

     mov [tvi.hItem],eax
     invoke SendMessage,[treeHwnd],TVM_GETITEMA, 0, tvi
     Msg edi

     invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_CHILD,[hItem]
.up: mov [chilldr],eax
 test eax,eax
     jz  .ext
     push eax
     call travers
     invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_NEXT,[chilldr]
        
     jmp .up
.ext:     ret
chilldr dd 0
endp

GetStructNames0:
        invoke GetDlgItem,esi,1
        mov [treeHwnd],eax
        ;invoke SendMessage,eax,TVM_GETCOUNT,0,0
        ;inc eax
        ;mov [treeNumItems],eax
;cinvoke sprintf,Status+1000,'%d',eax
;Msg Status+1000

        mov [tvi.cChildren], 0
        mov edi,Status
        mov [tvi.mask],TVIF_TEXT
        mov [tvi.cchTextMax], maxTxtLenn ;ne date real size! Vsegda ostaetca maxTxtLenn
        mov [tvi.pszText],edi

        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_ROOT,0  ;get first tree element
.uu:    mov [tvi.hItem],eax
        invoke SendMessage,[treeHwnd],TVM_GETITEMA, 0, tvi

        Msg edi

;get childrns
        mov ebx, [tvi.hItem]
.nnx:
        mov [tvi.mask],TVIF_TEXT+TVIF_CHILDREN
        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_CHILD,[tvi.hItem]
        mov [tvi.hItem],eax
        test eax,eax
        jz .done
.10:
        invoke SendMessage,[treeHwnd],TVM_GETITEMA, 0, tvi
        ;dec [treeNumItems]
        ;jz  .ll
        cmp [tvi.cChildren],1
        jnz .oo
        mov eax,[tvi.hItem]
        mov [Childrn.Item],eax
        inc [treeVetka]
        mov ecx,[treeVetka]
        mov [treeVetka+ecx*4],ebx
        Msg edi ;potom nado snova vernutca na etot [tvi.hItem] inache ne budget names druhih childrens
        jmp .nnx
.oo:
        mov esi,eax
        Msg edi
        mov word [edi],0
        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_NEXT,[tvi.hItem]
        mov [tvi.hItem],eax
        test esi,esi
        jnz .10
;mov [tvi.hItem],ebx
;jmp .nnx
.done:
;new update
        cmp [Childrn.Item],0
        jz  .jj
        mov eax,[Childrn.Item]
        mov [Childrn.Item],0
        mov [tvi.hItem],eax
mov ebx,eax 
invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_CHILD,[tvi.hItem]
        mov [tvi.hItem],eax
        jmp .nnx ;.10 .nnx
.jj:
;end new
        mov [tvi.mask],TVIF_TEXT
        mov     [tvi.cChildren], 0
        mov [tvi.hItem],ebx
        invoke SendMessage,[treeHwnd],TVM_GETNEXTITEM,TVGN_NEXT,[tvi.hItem]
        test eax,eax
        jnz  .uu
;new2
        cmp [treeVetka],0
        jz  .kon
	dec [treeVetka]
        mov ebx,[treeVetka]
        mov ebx,[treeVetka+ebx*4]
        ;dec [treeVetka]
        jmp .jj
.kon:
        Msg  'konec'
;end new2


.ll:
        xor ecx,ecx
        ret

treeNumItems dd 0
Childrn.Item dd 0
treeVetka    dd 0
             dd 40 dup (0) ;hItem ptrs na parents

GetTxtTree: ;Msg .tt
comboGetTxt 200
;Msg comboTxt
;mov [tvi.hItem],0
mov [tvi.mask],TVIF_TEXT;+TVIF_HANDLE
mov [tvi.cchTextMax], maxTxtLenn
mov [tvi.pszText],.tt
;invoke  SendDlgItemMessage, esi, 1, LVM_GETITEM, 0, tvi

rept 1 {
invoke GetDlgItem,esi,1
mov [treeHwnd],eax
;invoke SendMessage,eax,LVM_GETITEMTEXTA, 0, tvi
invoke SendMessage,eax,TVM_GETNEXTITEM,TVGN_CARET, 0 ;TVGN_NEXTVISIBLE  TVGN_FIRSTVISIBLE TVGN_CARET
mov [tvi.hItem],eax
invoke SendMessage,[treeHwnd],TVM_SETITEMA, 0, tvi                      ;TVM_SETITEMA TVM_GETITEMA
;invoke SendMessage,[treeHwnd],TVM_DELETEITEM,0,[tvi.hItem]
}

;jz @f
;Msg 'yes'
;@@:

Msg [tvi.pszText]
xor ecx,ecx
ret
.tt db 'done',0
        dB 92 dup(0)
treeHwnd dd 0
