#define TREE_ROOT $ffff0000 ;================================================================================ ;モジュール treebox ;ver 1.0 ; ツリーボックス ; llmod.asが必要です ;================================================================================ ; treeboxモジュール命令一覧 ; ; treebox ツリーボックスの作成 ; sel_treebox 操作するツリーボックスを選択 ; treeadd ツリーボックスにアイテムを追加 ; treedel ツリーボックスのアイテムを消去 ; treesel ツリーボックスのアイテムを選択 ; treeget ツリーボックスの各情報を取得 ; treemax ツリーボックスのアイテムの数を取得 ; treesort ツリーボックスのアイテムをソート ; treeicon ツリーボックスのアイコンを設定 ; treehit マウスの下にあるアイテムを取得 ; ; 計 10個 ;使い方 ;================================================================================ ; treebox n1,n2,n3 ツリーボックスの作成 ; ; n1 : 幅 ; n2 : 高さ ; n3 : スタイル ;================================================================================ ; ;<>説明 ; ツリーボックスを作成します。 ; ツリーボックスとはエクスプローラーの左側にあるようなものです。 ; 幅や高さを省略するとobjsizeで設定した幅、高さが使われます。 ; ;<>この命令を呼び出した後のstatの値 ; ツリーボックスのID ; ;<>スタイル ; スタイルは以下の値を組み合わせて使うことができます。 ;n3の値 ; 1 アイテムが子を持つとき'+','-'のマークが付く ; 2 アイテムとアイテムを繋ぐ線がつく ; 4 最初のアイテムに線が付く(2が指定されているときのみ) ; 8 ※この数字は使わないで下さい。 ; $10 ※この数字は使わないで下さい。 ; $20 ツリーボックスが選択されていないときにも選択されているアイテムが ; 分かるように色が付く ; $40 ※よく分からない(tom) ; $80 アイテムがツリーボックスからはみ出ていてもツールチップがつかない ; ;※以下のスタイルはcomctl32.dllのバージョンによっては使用できないものもあります。 ; $100 項目にチェックボックスが付く ; $200 マウスがアイテムの上に来ると下線が付く ; $400 マウスでクリックされたアイテムのみが展開される ; $800 ※よく分からない(tom) ; $1000 スタイル2 が指定されていないとき、選択されたアイテムの背景が変わる ; $2000 アイテムがツリーボックス内に収まらない時でも、スクロールバー ; が付かない ; $4000 ※よく分からない(tom) ; $8000 水平スクロールバーが付かない ; ; スタイルを省略するとここで設定したデフォルトスタイルが使用されます。 #define DEFAULT_TREEBOX_STYLE 0 ;================================================================================ ; sel_treebox n1 操作するツリーボックスを選択 ; ; n1 : ツリーボックスのID ;================================================================================ ; ;<>説明 ; この命令使用後はn1で指定したツリーボックスに対して各操作を行います。 ; 新規にツリーボックスを作成すると、自動的にそのツリーボックスが各操作の対象 ; になります。 ; 複数のツリーボックスを作成したときは、この命令で操作するツリーボックスを ; 選択してください。 ; ;================================================================================ ; treeadd n1,"s2",n3,n4,n5,n6 ツリーボックスにアイテムを追加 ; ; n1 : 親アイテムのID ; s2 : アイテムのテキスト ; n3 : アイテムの追加の仕方 ; n4 : アイテムが収縮している時のアイコン番号 ; n5 : アイテムが展開している時のアイコン番号 ; n6 : アイテムに持たせる数値 ;================================================================================ ; ;<>説明 ; ツリーボックスにn1を親にしてアイテムを加えます。 ; n1に0を代入すると一番目のアイテムになります。 ; n3にはどのようにアイテムを追加するか、n4には収縮している時のアイコン番号 ; (0から)、n5には展開しているときのアイコン番号(0から)を入れます。 ; ; どのように追加するかは、1で先頭の子として追加、0または2で一番最後の子と ; して追加、3でソートして追加、となります。 ; アイコンはtreeiconでセットします。 ; ; n6に値を入れてアイテムにその数値を持たせることができます。 ; n6で設定した数値はtreegetで取得できます。 ; ;<>この命令を呼び出した後のstatの値 ; 追加したアイテムのID(0ならエラー) ; ;<>例 ; ;親をitm3、ソートして追加、収縮しているときのアイコン番号を0、 ; ;展開しているときのアイコン番号を1にしてアイテムを追加 ; treeadd itm3,"new item",3,0,1 ; new_itm_id=stat ; ;================================================================================ ; treedel n1 ツリーボックスのアイテムを消去 ; ; n1 : アイテムのID ;================================================================================ ; ;<>説明 ; n1で指定したアイテムを消去します。 ; ;================================================================================ ; treesel n1,n2 ツリーボックスのアイテムを選択 ; ; n1 : アイテムのID ; n2 : 選択状態のタイプ ;================================================================================ ; ;<>説明 ; n1で指定したアイテムを選択します。 ; n2に$10を足すとアイテムが子をもっているとき、そのアイテムを収縮します。 ; n2に$20を足すとアイテムが子をもっているとき、そのアイテムを展開します。 ; ;n2の値 選択状態 ; 0 普通のタイプ ; 1 DragDropのtargetのようなタイプ ; 2 itemを先頭に持っていって選択(家の環境ではならないような... tom) ; +$10 展開 ; +$20 収縮 ; +$30 逆の状態にする ; ;================================================================================ ; treeget v1,n2,n3,n4 ツリーボックスの各情報を取得 ; ; v1 : 取得したものを入れる変数 ; n2 : 取得するタイプ ; n3 : n2によって変わる ; n4 : n2によって変わる ;================================================================================ ; ;<>説明 ; 主にアイテムのIDを取得します。 ; n2で以下の値を代入すると取得するものが変わってきます。 ; ;n2の値 n3の値 n4の値 ; 0 選択されているアイテムのIDを取得 0 0 ; 1 次のアイテムのID(同じレベル)を取得 アイテムのID 0 ; 2 前のアイテムのID(同じレベル)を取得 アイテムのID 0 ; 3 親アイテムのIDを取得 アイテムのID 0 ; 4 一番目の子どもアイテムのIDを取得 アイテムのID 0 ; 5 最初に見えているアイテムのIDを取得 アイテムのID 0 ; 6 アイテムのテキスト取得 アイテムのID 変数のサイズ or -1 ; 7 アイテムに持たせた値を取得 アイテムのID 0 or 1 ; -1 ルートを取得 0 0 ; ; 値が0の所は省略できます。 ; n2が6の場合、n4に何文字まで取得するか指定します。63文字以内なら省略できます。 ; n2が6のときはstatにtreeaddでアイテムに持たせた値が代入されます。 ; ; n2を6にしたときn4を-1にすると、v1に入っている文字列を使ってアイテムのテキスト ; を再設定できます。 ; n2を7にしたときn4を1にすると、v1に入っている値を使ってアイテムに持たせた値を ; 再設定できます。 ; ;================================================================================ ; treemax v1,n2 ツリーボックスのアイテムの数を取得 ; ; v1 : ツリーボックス内のアイテムの数を入れる数値変数 ; n2 : フラグ ;================================================================================ ; ;<>説明 ; ツリーボックス内のアイテムの数を取得します。 ; n2を1にするとツリーボックス内に完全に見えているアイテムの数を取得します。 ; ;================================================================================ ; treesort n1 ツリーボックスのアイテムをソート ; ; n1 : アイテムのID ;================================================================================ ; ;<>説明 ; n1で指定したアイテムの子をソートします。 ; n1を省略するとトップのアイテムをソートします。 ; ;================================================================================ ; treeicon v1,n2 ツリーボックスのアイコンを設定 ; ; v1 : アイコンが入った数値変数(get_iconで取得したもの) ; n2 : アイコンの数 ;================================================================================ ; ;<>説明 ; ツリーボックスのアイテムのアイコンを設定します。 ; アイコンをセットするには、imgモジュールが必要です。 ; ;※必ず、treebox.asより先にimg.asをインクルードしてください。 ; ;例) ; #include "llmod.as" ; #include "img.as" ;treeiconを使う時は必要(treebox.asより前に) ; #include "treebox.as" ; ;まずツリーボックスを作成 ; treebox 300,200,1|2|4|$20 ; ; ;shell32.dllの3番目と4番目のアイコン(小さい方)を使う ; ;(*get_iconについてはimg.asの説明を読んでください。) ; filename="shell32.dll" ; get_icon icons.0,filename,3,1 ; get_icon icons.1,filename,4,1 ; ; treeicon icons,2 ; img_id=stat ;セットしたアイコンについての情報が入った特別な値 ; ; ;アイテムを追加 ; ;親無し、最後に追加、アイコンは収縮時0、展開時1番目のものを使う ; treeadd 0,"folder 1",,0,1 ; itm1=stat ; ; ; ; ; ;<>この命令を呼び出した後のstatの値 ; セットしたアイコンについての情報が入った特別な値が返されます。 ; (イメージリストと呼ばれるものです。) ; treeboxがいらなくなってtreeboxを消去したときはなるべく ; destroy_imglist 'treeicon実行後にstatに代入された値' ; を実行してください。 ; (アイコンをセットするとメモリを消費します。destroy_imglistを実行することで ; セットして消費したメモリを開放します。) ; treeboxがまだあるうちにdestroy_imglistを実行すると、セットされたアイコンは ; 無効になります。 ; ;================================================================================ ; treehit マウスの下にあるアイテムを取得 ;================================================================================ ; ;<>説明 ; マウスの下にあるアイテムのIDを取得します。 ; ;<>この命令を呼び出した後のstatの値 ; マウスの下にあるアイテムのIDが代入されます。 ; マウスの下にアイテムが無ければ0が代入されます。 ; ;module始め>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #module "treebox" ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treebox ;Tree-Viewの作成 ;................................................................................ #deffunc treebox int,int,int mref v1 mref v2,1 mref v3,2 mref stt,64 ;sttはここでstat扱いにする if v3=0 : v3=DEFAULT_TREEBOX_STYLE ;#define WS_CHILD 0x40000000 ;#define WS_VISIBLE 0x10000000 v3=v3|$50000000 alloc m,64 ;リセット m=csrx,csry,v1,v2,v3,0,$200 _makewnd m,"SysTreeView32" handle_of_tree=m stt=handle_of_tree return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;sel_treebox ; ;................................................................................ #deffunc sel_treebox int mref v1 stt=handle_of_tree ;セットする前のハンドルをstatに代入 handle_of_tree=v1 return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treeadd ;Tree-Viewにアイテムを加える ;................................................................................ #deffunc treeadd int,str,int,int,int,int mref v1 ;parent item ID mref v2,33 ;label of item mref v3,2 ;insaft mref v4,3 ;image mref v5,4 ;select_image mref v6,5 ;lparam ;TV_ITEM mask ;#define TVIF_TEXT 1 ;#define TVIF_IMAGE 2 ;#define TVIF_PARAM 4 ;#define TVIF_STATE 8 ;#define TVIF_HANDLE 16 ;#define TVIF_SELECTEDIMAGE 32 ;#define TVIF_CHILDREN 64 ; tvi.0=1|2|4|32 ;mask ; tvi.0=39 ;mask ; strlen m,v2 : if m>=64 : alloc lcl_s,m+1 ; tvi.5=m ;cchTextMax ; lcl_s=v2 ; getptr p,lcl_s ; tvi.4=p ;pszText ; tvi.6=v1.2 ;iImage ; tvi.7=v1.3 ;iSelectedImage ; tvi.9=v3 ;lParam ; ; strlen m,v2 : if m>=64 : alloc lcl_s,m+1 ; lcl_s=v2 ; getptr p,lcl_s ; tvi=39,0,0,0,p,m,v1.2,v1.3,0,v3 getptr p,v2 ;#define TVI_ROOT $ffff0000 ;-65536 ;#define TVI_FIRST $ffff0001 ;-65535 ;#define TVI_LAST $ffff0002 ;-65534 ;#define TVI_SORT $ffff0003 ;-65533 ;親をセットしてなければ、親はルート if v1=0 : v1=TREE_ROOT tvins=v1, v3|$ffff0000 ,39,0,0,0,p,m,v4,v5,0,v6 getptr p,tvins ;#define TVM_INSERTITEMA 4352 prm=handle_of_tree,4352,0,p sendmsg prm return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treedel ;Tree-Viewのitemを消去する ;................................................................................ #deffunc treedel int mref v1 ;itemを$ffff0000にすると全て消せる ;#define TVM_DELETEITEM 4353 prm=handle_of_tree,4353,0,v1 sendmsg prm return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treesel ;Tree-Viewのitemを選択する ;................................................................................ #deffunc treesel int,int mref v1 ;item ID mref v2,1 ;flag ; flag ;#define TVGN_CARET 9 0 普通のタイプ ;#define TVGN_DROPHILITE 8 1 DragDropのtargetのようなタイプ ;#define TVGN_FIRSTVISIBLE 5 2 itemを先頭に持っていって選択 a=v2&$f0 if a { a=a>>4 ;#define TVE_COLLAPSE 1 ;#define TVE_COLLAPSERESET 32768 ;#define TVE_EXPAND 2 ;#define TVE_TOGGLE 3 ;#define TVM_EXPAND 4354 prm=handle_of_tree,4354,a,v1 sendmsg prm } v2=v2&$f if v2=2 : v2=5 : else v2=9-v2 ;#define TVM_SELECTITEM 4363 prm=handle_of_tree,4363,v2,v1 sendmsg prm return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treemax ;Tree-View内にあるitemの数を調べる ;................................................................................ #deffunc treemax val,int mref v1,16 ;buffer mref v2,1 ;flag ;#define TVM_GETVISIBLECOUNT 4368 ;#define TVM_GETCOUNT 4357 if v2 : m=4368 : else m=4357 prm=handle_of_tree,m,0,0 sendmsg prm v1=stat return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treeget ;itemの取得 ;................................................................................ #deffunc treeget val,int,int,int ;v1は下の方で設定 mref v2,1 ;flag mref v3,2 ;item ID mref v4,3 ;バッファのサイズ ; flag ;#define TVGN_CARET 9 0 選択されているitemを取得 ;#define TVGN_NEXT 1 1 次のアイテム(同じレベル)を取得 ;#define TVGN_PREVIOUS 2 2 前のアイテム(同じレベル)を取得 ;#define TVGN_PARENT 3 3 親itemを取得 ;#define TVGN_CHILD 4 4 一番目の子どものitemを取得 ;#define TVGN_FIRSTVISIBLE 5 5 見えている最初のitemを取得 ;xxxxx x 6 itemのテキスト取得(statにitemのlparamが入る) ;#define TVGN_ROOT 0 -1 ルートを取得 ;未サポート ;#define TVGN_PREVIOUSVISIBLE 7 前の見えているitem ;#define TVGN_NEXTVISIBLE 6 次の見えているitem ;#define TVGN_DROPHILITE 8 dragdropのtarget if v2>=6 { getptr p,tvi if v2=6 { mref v1,24 ;バッファ if v4=0 : v4=64 ;バッファのサイズを省略したときの大きさ tvi.5=v4 ;cchTextMax getptr tvi.4,v1 ;pszText tvi=5,v3 ;mask, hItem ;#define TVM_GETITEMA 4364 ;#define TVM_SETITEMA 4365 m=4364 if v4<0 : tvi=1 : m+ ;再設定 prm=handle_of_tree,m,0,p sendmsg prm stt=tvi.9 }else{ ;v2=7 mref v1,16 tvi=4,v3 ;mask, hItem ;#define TVM_SETITEMA 4365 m=4364 if v4 : tvi.9=v1 : m+ ;再設定 prm=handle_of_tree,m,0,p sendmsg prm v1=tvi.9 stt=0 } }else{ mref v1,16 ;バッファ if v2=0 : v2=9 : else if v2=-1 : v2=0 ;#define TVM_GETNEXTITEM 4362 prm=handle_of_tree,4362,v2,v3 sendmsg prm v1=stat stt=0 } return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treesort ;Tree-View内にあるitemの子をソート(文字列ソート) ;(var.0を$ffff0000にするとルートの子をソートする) ;................................................................................ #deffunc treesort int mref v1 ;item ID ;#define TVM_SORTCHILDREN 4371 if v1=0 : v1=$ffff0000 prm=handle_of_tree,4371,0,v1 sendmsg prm return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treeimglist ;Tree-Viewのitemのイメージリストをセット ;................................................................................ #deffunc treeimglist int mref v1 ;image list ;#define TVSIL_NORMAL 0 ;#define TVSIL_STATE 2 ;#define TVM_SETIMAGELIST 4361 prm=handle_of_tree,4361,0,v1 sendmsg prm return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treeicon ;Tree-Viewのitemのアイコンをセット ;img.asが必要 ;................................................................................ #deffunc treeicon val,int mref v1,16 ;handle of icons mref v2,1 ;iconの数 create_imglist 16,16,1|4,v2 a=stat if a=0 : stt=0 : return repeat v2 addicon_imglist a,v1.cnt loop treeimglist a ;ここで image list を消すとまずい ;(セットしたimage listを消すと、treeviewのimageも表示されなくなる) ; if a { ; dll_load dll,"comctl32" ; dll_getfunc func,"ImageList_Destroy",dll ; dll_func a,1,func ; dll_free dll ;comctl32 free--------------------------- ; } stt=a return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;treehit ;Tree-View ;................................................................................ #deffunc treehit int mref v1 ;flag ginfo m=prmx,prmy getptr p,m prm=handle_of_tree,p dllproc "ScreenToClient",prm,2,D_USER ;#define TVHT_ONITEMICON 2 ;#define TVHT_ONITEMLABEL 4 ;#define TVHT_ONITEMINDENT 8 ;#define TVHT_ONITEMBUTTON 16 ;#define TVHT_ONITEMRIGHT 32 ;#define TVHT_ONITEMSTATEICON 64 ;#define TVHT_ONITEM 70 if v1 : m.2=v1 : else : m.2=70 m.3=0 ;#define TVM_HITTEST 4369 prm=handle_of_tree,4369,0,p sendmsg prm return ;module終わり>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #global ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;tree_edit X使用不可 ;................................................................................ ;#define TVS_EDITLABELS 8 をスタイルに付ければできると思ったがダメ ;TVN_ENDLABELEDITを処理しないとダメ ; #deffunc tree_edit 1 ; mref var,16 ;var.0=item, var.1=h_tree ; mref stt,64 ;#define TVM_EDITLABELA 4366 ; prm=var.1,4366,0,var.0 ; sendmsg prm ; return