/*--------- ---------- ---------- ---------- ---------- ; http://www.setsuki.com/ ;---------- ---------- ---------- ---------- ---------- ; 使用例) #include "listview.as" ; ツリービューを作成する treeview 600,400, TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT ; ツリービューにアイテムを追加 treeadd "アイテム1", 0, -1 : hsub = stat treeadd "アイテム2", hsub, -1 treeadd "アイテム3", hsub, -1 treeadd "アイテム4", 0, -1 treeadd "アイテム5", 0, -1 treeadd "アイテム6", 0, -1 treeadd "アイテム7", 0, -1 button gosub "追加", *OnAdd button gosub "削除", *OnDelete stop *OnAdd ; 選択中のアイテムに子アイテム追加 treeadd "子アイテム", treenow, -1 : hsub = stat ; 追加したアイテムを選択 treeitemsel hsub ; カーソルがボタンに移るので、ツリービューに戻す objsel 0 return *OnDelete ; 選択中のアイテムを削除 treedel treenow objsel 0 return ;---------- ---------- ---------- ---------- ---------- ;htreeview ; 選択中のツリービューのハンドルを取得 ;treenow ; 選択中のアイテムのハンドルを取得 ;treeview width, height, style, menuID ; ツリービュー作成 ;treesel objectID ; 選択中のツリービューを変更 ;treeadd string, hitem, subitem ; ツリービューにアイテム追加 ;treeget hitem, flag ; ツリービューのアイテムを取得 ;treeopen hitem, flag ; アイテムを開いたり、閉じたりする ;treeitemsel hitem ; アイテムを選択状態にする ;treedel hitem ; アイテムの削除 ;---------- ---------- ---------- ---------- ---------*/ #ifndef WM_NOTIFY #define global WM_NOTIFY $004E #endif #ifndef NM_CLICK #define global NM_CLICK -2 #define global NM_DBLCLK -3 #define global NM_KILLFOCUS -8 #define global NM_OUTOFMEMORY -1 #define global NM_RCLICK -5 #endif ;---------- ---------- ---------- ---------- ---------*/ ; CreateWindowEX の dwStyle に指定する値 #define global TVS_HASBUTTONS 0x0001 ;「+」「-」表示 #define global TVS_HASLINES 0x0002 ;アイテムを線でつなぐ #define global TVS_LINESATROOT 0x0004 ;一番上のアイテムに線を付ける (必須:TVS_HASLINES) #define global TVS_EDITLABELS 0x0008 ;アイテムの文字を編集可 #define global TVS_DISABLEDRAGDROP 0x0010 ;TVN_BEGINDRAG を送らない #define global TVS_SHOWSELALWAYS 0x0020 ;常に選択表示 #define global TVS_RTLREADING 0x0040 ;ver4.70〜 #define global TVS_NOTOOLTIPS 0x0080 ;ver4.70〜 ツールチップなし #define global TVS_CHECKBOXES 0x0100 ;ver4.70〜 アイテムにチェックボックス付ける #define global TVS_TRACKSELECT 0x0200 ;ver4.70〜 マウスカーソルがアイテムの上に来たときに下線が付く #define global TVS_SINGLEEXPAND 0x0400 ;ver4.71〜 選択アイテムのみ展開 #define global TVS_INFOTIP 0x0800 ;ver4.71〜 TVN_GETINFOTIP を送り、ツールチップ情報を得る #define global TVS_FULLROWSELECT 0x1000 ;ver4.71〜 列全体を選択 (×TVS_HASLINES) #define global TVS_NOSCROLL 0x2000 ;ver4.71〜 スクロールバー非表示 #define global TVS_NONEVENHEIGHT 0x4000 ;ver4.71〜 個々のアイテムの高さを変更可 ;---------- ---------- ---------- ---------- ---------- ; sedmsg で使用する送信メッセージ #define global TVM_INSERTITEM $1100 ;新しいアイテムを追加 #define global TVM_DELETEITEM $1101 ;アイテムを削除 #define global TVM_EXPAND $1102 ;アイテムを開く・閉じる #define global TVM_GETCOUNT $1105 ;アイテム数の取得 #define global TVM_SETIMAGELIST $1109 ;イメージリストを設定 #define global TVM_GETNEXTITEM $110A ;指定されたアイテムを取得 #define global TVM_SELECTITEM $110B #define global TVM_GETITEM $110C ;アイテムの属性を取得 #define global TVM_SETITEM $110D ;アイテムの属性を設定 #define global TVM_GETVISIBLECOUNT $1110 ;表示可能なアイテム数の取得 #define global TVM_GETBKCOLOR $111F ;背景色を取得 #define global TVM_GETTEXTCOLOR $1120 ;文字色を取得 // TVITEM 構造体の mask に指定する値 #define global TVIF_TEXT $0001 #define global TVIF_IMAGE $0002 #define global TVIF_PARAM $0004 #define global TVIF_STATE $0008 #define global TVIF_HANDLE $0010 #define global TVIF_SELECTEDIMAGE $0020 #define global TVIF_CHILDREN $0040 #define global TVIF_INTEGRAL $0080 #define global TVIS_SELECTED $0002 #define global TVIS_CUT $0004 #define global TVIS_DROPHILITED $0008 #define global TVIS_BOLD $0010 #define global TVIS_EXPANDED $0020 #define global TVIS_EXPANDEDONCE $0040 ; TVINSERTSTRUCT 構造体の hInsertAfter に使用する値 #define global TVI_ROOT $FFFF0000 ;アイテムをルートアイテムとして追加 #define global TVI_FIRST $FFFF0001 ;アイテムをリストの最初の位置に挿入 #define global TVI_LAST $FFFF0002 ;アイテムをリストの最後の位置に挿入 #define global TVI_SORT $FFFF0003 ;アイテムをアルファベット順にリストに挿入 ; TVM_GETNEXTITEM メッセージで使用する値 #define global TVGN_ROOT $0000 ;ツリービューのルート(最も上の階層)のアイテム #define global TVGN_NEXT $0001 ;指定アイテムと同じグループ内の次のアイテム #define global TVGN_PREVIOUS $0002 ;指定アイテムと同じグループ内の前のアイテム #define global TVGN_PARENT $0003 ;指定アイテムの親アイテム #define global TVGN_CHILD $0004 ;指定アイテムが持つ最初の子アイテム #define global TVGN_FIRSTVISIBLE $0005 ;ツリービューウィンドウ内で見えている最初のアイテム #define global TVGN_NEXTVISIBLE $0006 ;指定されたアイテムに続く次の見えているアイテム #define global TVGN_PREVIOUSVISIBLE $0007 ;指定されたアイテムの前にある見えているアイテム #define global TVGN_DROPHILITE $0008 ;ドラッグ&ドロップのターゲットとなっているアイテム #define global TVGN_CARET $0009 ;現在選択されているアイテム #define global TVGN_LASTVISIBLE $000A ;ver4.71〜 最後に広げられたアイテム ;---------- ---------- ---------- ---------- ---------- #define global TreeView_InsertItem(%1,%2) sendmsg %1,TVM_INSERTITEM,0,%2 #define global TreeView_DeleteItem(%1,%2) sendmsg %1,TVM_DELETEITEM,0,%2 #define global TreeView_DeleteAllItems(%1) sendmsg %1,TVM_DELETEITEM,0,TVI_ROOT #define global TreeView_Expand(%1,%2,%3) sendmsg %1,TVM_EXPAND,%3,%2 ;#define global TreeView_GetItemRect(%,%2,%3,%4) %3=%2 : sendmsg %1,TVM_GETITEMRECT,%4,varptr(%3) #define global TreeView_GetCount(%1) sendmsg %1,TVM_GETCOUNT,0,0 ;OK #define global TreeView_GetIndent(%1) sendmsg %1,TVM_GETINDENT,0,0 #define global TreeView_SetIndent(%1,%2) sendmsg %1,TVM_SETINDENT,%2,0 #define global TreeView_GetImageList(%1,%2) sendmsg %1,TVM_GETIMAGELIST,%2,0 #define global TreeView_SetImageList(%1,%2,%3) sendmsg %1,TVM_SETIMAGELIST,%3,%2 #define global TreeView_GetNextItem(%1,%2,%3) sendmsg %1,TVM_GETNEXTITEM,%3,%2 #define global TreeView_GetChild(%1,%2) sendmsg %1,TVM_GETNEXTITEM,TVGN_CHILD,%2 #define global TreeView_GetNextSibling(%1,%2) sendmsg %1,TVM_GETNEXTITEM,TVGN_NEXT,%2 #define global TreeView_GetPrevSibling(%1,%2) sendmsg %1,TVM_GETNEXTITEM,TVGN_PREVIOUS,%2 #define global TreeView_GetParent(%1,%2) sendmsg %1,TVM_GETNEXTITEM,TVGN_PARENT,%2 #define global TreeView_GetFirstVisible(%1) sendmsg %1,TVM_GETNEXTITEM,TVGN_FIRSTVISIBLE,0 #define global TreeView_GetNextVisible(%1,%2) sendmsg %1,TVM_GETNEXTITEM,TVGN_NEXTVISIBLE,%2 #define global TreeView_GetPrevVisible(%1,%2) sendmsg %1,TVM_GETNEXTITEM,TVGN_PREVIOUSVISIBLE,%2 #define global TreeView_GetSelection(%1) sendmsg %1,TVM_GETNEXTITEM,TVGN_CARET,0 ;OK #define global TreeView_GetDropHilight(%1) sendmsg %1,TVM_GETNEXTITEM,TVGN_DROPHILITE,0 #define global TreeView_GetRoot(%1) sendmsg %1,TVM_GETNEXTITEM,TVGN_ROOT,0 #define global TreeView_Select(%1,%2,%3) sendmsg %1,TVM_SELECTITEM,%3,%2 ;OK #define global TreeView_SelectItem(%1,%2) sendmsg %1,TVM_SELECTITEM,TVGN_CARET,%2 #define global TreeView_SelectDropTarget(%1,%2) sendmsg %1,TVM_SELECTITEM,TVGN_DROPHILITE,%2 #define global TreeView_SelectSetFirstVisible(%1,%2) sendmsg %1,TVM_SELECTITEM,TVGN_FIRSTVISIBLE,%2 #define global TreeView_GetItem(%1,%2) sendmsg %1,TVM_GETITEM,0,%2 #define global TreeView_SetItem(%1,%2) sendmsg %1,TVM_SETITEM,0,%2 #define global TreeView_EditLabel(%1,%2) sendmsg %1,TVM_EDITLABEL,0,%2 #define global TreeView_GetEditControl(%1) sendmsg %1,TVM_GETEDITCONTROL,0,0 #define global TreeView_GetVisibleCount(%1) sendmsg %1,TVM_GETVISIBLECOUNT,0,0 #define global TreeView_HitTest(%1,%2) sendmsg %1,TVM_HITTEST,0,%2 #define global TreeView_CreateDragImage(%1,%2) sendmsg %1,TVM_CREATEDRAGIMAGE,0,%2 #define global TreeView_SortChildren(%1,%2,%3) sendmsg %1,TVM_SORTCHILDREN,%3,%2 #define global TreeView_EnsureVisible(%1,%2) sendmsg %1,TVM_ENSUREVISIBLE,0,%2 #define global TreeView_SortChildrenCB(%1,%2,%3) sendmsg %1,TVM_SORTCHILDRENCB,%3,%2 #define global TreeView_EndEditLabelNow(%1,%2) sendmsg %1,TVM_ENDEDITLABELNOW,%2,0 #define global TreeView_GetISearchString(%1,%2) sendmsg %1,TVM_GETISEARCHSTRING,0,%2 ;---------- ---------- ---------- ---------- ---------- ; 選択中のツリービューのハンドルを取得 #define global htreeview htree@m_treeview ; 選択中のアイテムのハンドルを取得 #define global treenow gettreeitem(0,TVGN_CARET) #module m_treeview ;---------- ---------- ---------- ---------- ---------- ; ツリービューを作成 ;---------- ---------- ---------- ---------- ---------- #deffunc treeview int w, int h, int index, int sub ; exstyle = WS_EX_CLIENTEDGE ; style = ( WS_CHILD | WS_VISIBLE ) winobj "SysTreeView32","", $200, $50000000 | index, w, h, sub htree = objinfo(stat, 2) return ;---------- ---------- ---------- ---------- ---------- ; 選択中のツリービューを変更 ;---------- ---------- ---------- ---------- ---------- #deffunc treesel int index htree = objinfo(index, 2) return ;---------- ---------- ---------- ---------- ---------- ; ツリービューにアイテム追加 ;---------- ---------- ---------- ---------- ---------- #deffunc treeadd str sdata, int index, int sub, int image if( htree == 0 ): return dim String, strlen(sdata)+1 : String = sdata ;TVINSERTSTRUCT構造体 ( $0023 = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE ) dim prm, 12 : prm = index, sub, $0023, 0,0,0, varptr(String), 0, image, image if( sub == -1 ): prm.1 = $FFFF0002 ;( TVM_INSERTITEM ) sendmsg htree, $1100, 0, varptr(prm) return ;---------- ---------- ---------- ---------- ---------- ; ツリービューのアイテムを取得 ;---------- ---------- ---------- ---------- ---------- #defcfunc treeget int index, int sub if( htree == 0 )||( sub < 1 )||( sub > 9 ): return -1 ;TVINSERTSTRUCT構造体 ( $007F = 全部指定 ) dim prm, 12 : prm = $007F, index if( sub == 4 ){ sdim String,260 : prm.4 = varptr(String),260 ;( TVM_GETITEM ) sendmsg htree, $110C, 0, varptr(prm) return String } ;( TVM_GETITEM ) sendmsg htree, $110C, 0, varptr(prm) return prm.sub ;---------- ---------- ---------- ---------- ---------- ; 選択中のアイテムハンドルの取得 ;---------- ---------- ---------- ---------- ---------- #defcfunc gettreeitem int index, int sub ;( TVM_GETNEXTITEM ) sendmsg htree, $110A, sub, index return stat ;---------- ---------- ---------- ---------- ---------- ; アイテムの開閉 ( 開く:sub == 2、 閉じる:sub == 1 ) ;---------- ---------- ---------- ---------- ---------- #deffunc treeopen int index, int sub ;( TVM_EXPAND ) sendmsg htree, $1102, sub, index return ;---------- ---------- ---------- ---------- ---------- ; アイテムを選択状態にする ;---------- ---------- ---------- ---------- ---------- #deffunc treeitemsel int index ;( TVM_SELECTITEM ) sendmsg htree, $110B, TVGN_CARET, index return ;---------- ---------- ---------- ---------- ---------- ; アイテムの削除 ( 全消し : index = $FFFF0000 ) ;---------- ---------- ---------- ---------- ---------- #deffunc treedel int index if( htree == 0 )||( index == 0 ): return ;( TVM_DELETEITEM ) sendmsg htree, $1101, 0, index return ;---------- ---------- ---------- ---------- ---------- #global