Fujiさんのブログにあるモジュール変数でツリーを利用したスクリプト。
このモジュールで作成したツリーを渡すことで、ツリービューを作成するモジュールです。
ツリー作成モジュールは上記ブログからの引用(一部削除)です。// 参考
// http://yokohama.cool.ne.jp/chokuto/urawaza/treeview1.html
// http://www.fujidig.com/2007/12/modvar-tree.html
#module m_tree children, content
#modfunc set_tree_content str _content
content = _content
return
#defcfunc getaptr@m_tree var p1, local hspctx, local vptr
mref hspctx, 68
dupptr vptr, hspctx.207, 8, 4
return vptr.1
#modinit str _content
set_tree_content thismod, _content
dimtype children, 5, 1
return getaptr( thismod )
#deffunc _new_tree array tree, str _content
#define global new_tree( %1, %2 = "" ) _new_tree %1,%2
newmod tree, m_tree, _content
return stat
#defcfunc get_tree_content modvar m_tree@
return content
#defcfunc get_tree_num_children modvar m_tree@
return length( children )
#modfunc get_tree_child int index, var result
if( index < 0 || index >= length( children ) ) : return 1
if( varuse( children.index ) == 0 ) : return 1
result = children.index
return 0
#modfunc add_tree_child var child
new_tree children
children.stat = child
return
#modfunc _show_tree str indent
#define global show_tree( %1, %2 = "" ) _show_tree %1, %2
mes indent + content
foreach children
if( varuse( children.cnt ) ) {
show_tree children.cnt, indent + " "
}
loop
return
#global
// ここまで引用
#include "user32.as"
#include "comctl32.as"
#module m_treeview h_treeview
#const TVIF_TEXT 0x00000001
#const TVI_LAST 0xFFFF0002
#const TVM_INSERTITEM 0x00001100
// ノードを再帰的に追加
#modfunc add_node@m_treeview var _node, int h_parent, local node, local h_node
node = _node : dim tvins, 12
bufText = get_tree_content(node)
tvins = h_parent, TVI_LAST, TVIF_TEXT
tvins(6) = varptr(bufText), strlen(bufText)
sendmsg h_treeview, TVM_INSERTITEM, 0, varptr(tvins)
h_node = stat
// 子ノードの追加
repeat get_tree_num_children(node)
get_tree_child node, cnt, child
if stat : continue
add_node@m_treeview thismod, child, h_node
loop
return h_node
// ツリービューの作成
// statにはツリービューのハンドルが返る
#define global make_treeview(%1, %2, %3, %4) newmod %1, m_treeview, %2, %3, %4
#modinit var root, int _width, int _height
// コモンコントロールライブラリ初期化(無くても動作する?)
initCCEx = 8, 0x00000002
InitCommonControlsEx varptr(initCCEx)
if stat == 0 : return -1
// コントロールの作成
style = 0x40000000 | 0x10000000 | 0x0001 | 0x0002 | 0x0200
CreateWindowEx 0, "SysTreeView32", "", style, ginfo_cx, ginfo_cy, _width, _height, hwnd, 0, 0, 0
h_treeview = stat
if h_treeview == 0 : return -1
add_node@m_treeview thismod, root, 0
return h_treeview
#global
// ツリーの作成(引用)
new_tree tree, "root"
new_tree tree_1, "1"
add_tree_child tree, tree_1
new_tree tree_2, "2"
add_tree_child tree, tree_2
new_tree tree_2_1, "2-1"
add_tree_child tree_2, tree_2_1
new_tree tree_2_1_1, "2-1-1"
add_tree_child tree_2_1, tree_2_1_1
new_tree tree_2_2, "2-2"
add_tree_child tree_2, tree_2_2
// ツリービューを作成
cls 1
make_treeview treeview, tree, 100, ginfo_winy
if stat == -1 {
dialog "ツリービューの作成に失敗しました。", 1
end
}
// ツリーを表示
pos 100, 0
show_tree tree
stop
2008年1月5日土曜日
ツリービュー2
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿