Posts: 863
Threads: 197
Joined: Apr 2005
Can you help to create a dialog with SysTreeView32, Button and Edit: to insert edit text to SysTreeView32 as son of selected item in SysTreeView32.
Finally convert SysTreeView32 to text.
Thanks in advance.
Posts: 12,140
Threads: 142
Joined: Dec 2002
I used XML format to save tree view control data.
FUNCTIONS:
dialog_treeview_xml
XmlToTreeView
XmlFromTreeView
Attached Files
XML and tree view control.qml (Size: 3.25 KB / Downloads: 458)
Posts: 863
Threads: 197
Joined: Apr 2005
Thank you very much.
Perfect to learn.
Posts: 863
Threads: 197
Joined: Apr 2005
How can I expand all items in WM_INITDIALOG
and
how can i get a string like:
a1
a2
....b1
....b2
..........c1
..........c2
....b3
a3
?
Thanks again.
Posts: 12,140
Threads: 142
Joined: Dec 2002
I would try to send TVM_EXPAND message recursively.
----------
Function
StringFromTreeView
;/
function str & s htv [htvi] [__indent]
;Gets tree view control items to tab-indented string.
;s - variable that receives string.
;htv - control handle.
;htvi - parent item handle. Can be 0.
;__indent - don't use.
if ( ! __indent) s.all
htvi= SendMessage ( htv TVM_GETNEXTITEM iif ( htvi TVGN_CHILD TVGN_ROOT ) htvi)
rep
, if ( ! htvi) break
, TVITEMW t.mask= TVIF_TEXT | TVIF_CHILDREN
, t.hItem= htvi
, BSTR b; if ( ! b) b.alloc ( 1000 )
, t.pszText= b; t.cchTextMax= 1001
, SendMessage ( htv TVM_GETITEMW 0 & t)
, _s.ansi ( b)
, str si.all ( __indent 2 9 ) ;;creates string of __indent tabs. Change to other characters if need.
, s.formata ( "%s%s[]" si _s)
, if t.cChildren
,, StringFromTreeView s htv htvi __indent+ 1
, htvi= SendMessage ( htv TVM_GETNEXTITEM TVGN_NEXT htvi)
err + end _error
Posts: 863
Threads: 197
Joined: Apr 2005
Posts: 12,140
Threads: 142
Joined: Dec 2002
I would try to replace tabs to Unicode subrange "Box Drawings" characters │└├
Posts: 12,140
Threads: 142
Joined: Dec 2002
Member function
str.ReplaceIndentTabsToTreeLines
;EXAMPLE
;out
;str s
;StringFromTreeView s id(2202 _hwndqm)
;s.ReplaceIndentTabsToTreeLines
;out s
if ( ! _unicode) end "must be Unicode mode"
ARRAY ( lpstr) a; int i j k; lpstr t
if ( tok ( this a - 1 "[]" ) < 2 ) ret
for i 0 a.len
, t= a[i]
, for j 0 1000000000
,, if ( t[0 ]! 9 ) break
,, if ( t[1 ]= 9 )
,,, t[0 ]= 1 ;;│
,,, ;replace some extra │
,,, if i+ 1 = a.len or ( a[i+ 1 ][j]! 9 and ( i+ 2 = a.len or a[i+ 1 ]+ j< a[i+ 2 ]))
,,,, for ( k i - 1 - 1 ) if ( a[k][j]= 1 ) a[k][j]= 32 ; else a[k][j]= 3 ; break
,, else if ( i+ 1 < a.len and a[i+ 1 ][j]= 9 and ( i+ 2 = a.len or a[i+ 1 ]+ j< a[i+ 2 ])) t[0 ]= 2 ;;├
,, else t[0 ]= 3 ;;└
,, t+ 1
;at first used characters 1, 2, 3. Now replace to multibyte UTF-8 characters.
findreplace ( "[1]" "│" )
findreplace ( "[2]" "├" )
findreplace ( "[3]" "└" )
Posts: 863
Threads: 197
Joined: Apr 2005
Thanks. now I trying to noUnicode:
a
|-- b
| |-- c
| |-- d
| | |-- e
| | `-- f
| `-- g
| `-- h
|-- i
`-- j
`-- k
like tree /A (dos command)
Posts: 863
Threads: 197
Joined: Apr 2005
findreplace("[1]" "| ")
findreplace("[2]" "|--")
findreplace("[3]" "`--")