|
|
|
2015/11/30(Mon) 16:50:42|NO.73346
ツールバーを本格的に作ろうと、ツールバーのカスタマイズ機能をいれようと試みました。
しかし、ツールバーのカスタマイズ画面が表示しません。
どなたか教えてくれませんか?
#uselib "comctl32.dll"
#func InitCommonControls "InitCommonControls"
#define WM_COMMAND 0x0111
#define WM_NOTIFY 0x004E
#define TBN_DROPDOWN -710
#define TB_BUTTONSTRUCTSIZE 0x041E
#define TB_ADDBITMAP 0x0413
#define TB_AUTOSIZE 0x0421
#define TB_ADDBUTTONS 0x0414
#define TB_SETEXTENDEDSTYLE 0x0454
#define TB_GETRECT 0x0433
#define TB_CUSTOMIZE 0x0427
#define TBSTYLE_EX_DRAWDDARROWS 1
screen 0, 300, 200
oncmd gosub *OnCommand, WM_COMMAND
onexit gosub *OnClose
InitCommonControls
winobj "ToolbarWindow32","",0,$50000801,0,0
hTool = objinfo_hwnd(stat)
sendmsg hTool, TB_BUTTONSTRUCTSIZE, 20, 0
sendmsg hTool, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS
tbadd(0) = -1 ; HINST_COMMCTRL
tbadd(1) = 0 ; IDB_STD_SMALL_COLOR
sendmsg hTool, TB_ADDBITMAP, 0, varptr(tbadd)
tbb( 0) = 6, 1, 0x04, 0, 0 ;「新規作成」ボタン
tbb( 5) = 7, 2, 0x04, 0, 0 ;「開く」ボタン
tbb(10) = 8, 3, 0x04, 0, 0 ;「保存」ボタン
tbb(15) = 0, 0, 1<<8, 0, 0 ;「セパレータ」ボタン
tbb(20) = 0, 4, 0x04, 0, 0 ;「切り取り」ボタン
tbb(25) = 1, 5, 0x04, 0, 0 ;「コピー」ボタン
tbb(30) = 2, 6, 0x04, 0, 0 ;「貼り付け」ボタン
tbb(35) = 0, 0, 1<<8, 0, 0 ;「セパレータ」ボタン
tbb(40) = 3, 7, 0x04, 0, 0 ;「アンドゥ」ボタン
tbb(45) = 12, 8, 0x04, 0, 0 ;「検索」ボタン
sendmsg hTool, TB_ADDBUTTONS, 10, varptr(tbb)
sendmsg hTool, TB_AUTOSIZE, 0, 0
button gosub "カスタマイズ...",*ToolCustomize
stop
*OnCommand
if lparam!hTool:return
itemId = wParam & $FFFF
dialog "コマンドID:"+itemId
return
*OnClose
end
*ToolCustomize;カスタマイズ
sendmsg hTool,TB_CUSTOMIZE,0,0;←問題点
return
| |
|
2015/12/1(Tue) 01:24:04|NO.73357
どうやら TB_CUSTOMIZE の定数が違うみたいです。
正しくは
#define TB_CUSTOMIZE 0x041B
だそうです。
ただ、私も修正して試してみましたがウィンドウが一瞬表示されるだけで消えちゃいますね。
・・・?
ちょっとそれ以上は調べてないのですが、とりあえず取っ掛かりにはなるかもと思い、
コメントさせて頂きました。
|
|
2015/12/2(Wed) 21:26:23|NO.73373
NO.73357の修正を加えて
oncmdにWM_NOTIFYを設定して割り込みさせて
割り込み来たらlparamをNMHDR構造体ポインタとしてdupptrして
hwndFromを確認してcodeが
#const global TBN_QUERYDELETE -707
#const global TBN_QUERYINSERT -706
なら
return 1
で、閉じるまで消えなくなる
でもこれだけじゃ削除は出来るが追加が・・・
後で追加出来るようにしたのを書き込むかも
|
|
2015/12/3(Thu) 00:08:06|NO.73376
とりあえず問題なく動いてるが正しいのかは不明
ボタンを削除してからツールバー変更ウィンドウを閉じて
再度ツールバー変更ウィンドウを表示しても
利用できるツールバーボタンには出てこない(何か方法あるんだろう)
リセット押すと初期設定に戻る
#uselib "comctl32.dll"
#func InitCommonControls "InitCommonControls"
#define WM_COMMAND 0x0111
#define WM_NOTIFY 0x004E
#define TBN_DROPDOWN -710
#define TB_BUTTONSTRUCTSIZE 0x041E
#define TB_ADDBITMAP 0x0413
#define TB_AUTOSIZE 0x0421
#define TB_ADDBUTTONS 0x0414
#define TB_SETEXTENDEDSTYLE 0x0454
#define TB_GETRECT 0x0433
#const TB_BUTTONCOUNT 0x0418
#const TB_DELETEBUTTON 0x0416
#define TB_CUSTOMIZE 0x041B
#define TBSTYLE_EX_DRAWDDARROWS 1
screen 0, 300, 200
oncmd gosub *OnCommand, WM_COMMAND
oncmd gosub *OnNotify, WM_NOTIFY
onexit gosub *OnClose
InitCommonControls
winobj "ToolbarWindow32","",0,$50000801,0,0
hTool = objinfo_hwnd(stat)
sendmsg hTool, TB_BUTTONSTRUCTSIZE, 20, 0
sendmsg hTool, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS
tbadd(0) = -1 ; HINST_COMMCTRL
tbadd(1) = 0 ; IDB_STD_SMALL_COLOR
sendmsg hTool, TB_ADDBITMAP, 0, varptr(tbadd)
//コマンドID順ボタンデータリスト
toolbardat(0) = 0, 0, 1<<8, 0, 0 ;「セパレータ」ボタン
toolbardat(5) = 6, 1, 0x04, 0, 0 ;「新規作成」ボタン
toolbardat(10) = 7, 2, 0x04, 0, 0 ;「開く」ボタン
toolbardat(15) = 8, 3, 0x04, 0, 0 ;「保存」ボタン
toolbardat(20) = 0, 4, 0x04, 0, 0 ;「切り取り」ボタン
toolbardat(25) = 1, 5, 0x04, 0, 0 ;「コピー」ボタン
toolbardat(30) = 2, 6, 0x04, 0, 0 ;「貼り付け」ボタン
toolbardat(35) = 3, 7, 0x04, 0, 0 ;「アンドゥ」ボタン
toolbardat(40) = 12, 8, 0x04, 0, 0 ;「検索」ボタン
tbdarmax=length(toolbardat)/5
//配置順リスト
tblist=1,2,3,0,4,5,6,0,7,8
tbmax=length(tblist)
//配置順リストに従ってボタンデータをコピー
dim tbb,tbmax*5
repeat tbmax
tbbid=tblist(cnt)
memcpy tbb(cnt*5),toolbardat(tbbid*5),4*5
loop
sendmsg hTool, TB_ADDBUTTONS, tbmax, varptr(tbb)
sendmsg hTool, TB_AUTOSIZE, 0, 0
dellist="0\n"//削除リスト初期設定(セパレータは最初から削除された側にあるので)
button gosub "カスタマイズ...",*ToolCustomize
stop
*OnCommand
if lparam!hTool:return
itemId = wParam & $FFFF
dialog "コマンドID:"+itemId
return
/* 通知コード */
#const TBN_BEGINADJUST -703
#const TBN_BEGINDRAG -701
#const TBN_CUSTHELP -709
#const TBN_ENDADJUST -704
#const TBN_ENDDRAG -702
#const TBN_GETBUTTONINFOW -720
#const TBN_GETBUTTONINFOA -700
#const TBN_QUERYDELETE -707
#const TBN_QUERYINSERT -706
#const TBN_RESET -705
#const TBN_TOOLBARCHANGE -708
#const TBN_DELETINGBUTTON -715
*OnNotify
dupptr NMHDR_dup,lParam,4*10,4
if NMHDR_dup=hTool {//hwndFrom
switch NMHDR_dup(2) //code
case TBN_QUERYINSERT
return 1
case TBN_QUERYDELETE
return 1
case TBN_DELETINGBUTTON //削除された
if NMHDR_dup(3) ! 0 {//コマンドID0以外
notesel dellist
noteadd str(NMHDR_dup(3)),1,0 //削除されたIDをリスト化
noteunsel
}
swbreak
case TBN_RESET
sendmsg hTool,TB_BUTTONCOUNT,0,0
BUTTONCOUNT=stat
repeat BUTTONCOUNT
sendmsg hTool,TB_DELETEBUTTON,0,0
loop
sendmsg hTool, TB_ADDBUTTONS, tbmax, varptr(tbb)
dellist="0\n" //削除リスト初期設定
swbreak
case TBN_GETBUTTONINFOA
index = NMHDR_dup(4) //追加時(?)に選択されてるインデックス
notesel dellist
if index < notemax {
noteget addid_str,index
addid=int(addid_str)
if addid ! 0 { //コマンドIDが0以外ならボタンデータをコピー
notedel index //追加されたコマンドIDを削除されたIDリストから削除
memcpy NMHDR_dup(4),toolbardat(5*addid),5*4
}
noteunsel
return 1
}
noteunsel
return 0
default
swbreak
swend
}
return
*OnClose
end
*ToolCustomize;カスタマイズ
sendmsg hTool,TB_CUSTOMIZE,0,0
return
| |
|
2015/12/3(Thu) 17:56:03|NO.73382
皆さんありがとうございます!
よくできています。
自分のスクリプトに取り入れようと思います。
|
|
2015/12/3(Thu) 20:29:27|NO.73386
削除、追加ボタンでの変更は問題ないが
上へ、下へは区切り以外問題あり。
利用できるボタン側のウィンドウからWM_NOTIFYが来ないのが問題っぽい
コールバック内でやる必要がある?
|
|
2015/12/3(Thu) 20:38:36|NO.73387
僕が示したURLを見た感じだと、
・TB_SAVERESTOREが処理されてない
・ウィンドウプロシージャが定義されてない。
らへんに原因がありそうです。
にしてもレジストリいじらない方法ないかな?
|
|
2015/12/4(Fri) 19:30:57|NO.73407
TBN_GETBUTTONINFOAが飛んできたときのNMHDR_dupの内容が
>85135264 0 -700 0 0 385 0 43323770 4510136 128
85135264 ツールバーハンドル
0 コントロールID
-700 通知コード
0 ?
0 リストボックスのインデックス
385 ?
0 ?
43323770 現在のツールバーボタン側のリストボックスハンドル
4510136 ?
128 ?
利用できるツールバーボタン側のリストボックスハンドルも来てくれれば楽なんだけどな・・・
>・TB_SAVERESTOREが処理されてない
これは意図的に対応しなかった
(ファイルに保存は付けるかも)
>・ウィンドウプロシージャが定義されてない。
コールバックモジュールつかってツールバーの変更ダイアログのプロシージャ差し替えて
やってみたら工夫すれば、左右どちらのインデックスなのか場合別け出来そう
これが出来るなら削除時にコマンドID保持する必要も無くなる・・・
自己レス
>利用できるツールバーボタンには出てこない(何か方法あるんだろう)
方法は分かった(正しい方法かは不明)
|
|
2015/12/5(Sat) 10:02:31|NO.73422
とりあえずコールバックモジュール使えば追加削除上下ボタンドラックドロップの対応は出来た
でもテキスト有りだと左から右のリストボックスに入れるとツールバー側のボタンが文字化けする
リストボックス側は普通に表示されてる(半角1文字なら大丈夫だが・・・)
削除したのを再度ツールバーの変更開いたときに左側に削除済みボタンを表示するのも出来た
上のバグが取れたら書き込む
|
|
2015/12/5(Sat) 11:32:11|NO.73424
TBBUTTON構造体のiStringに文字列バッファのアドレスじゃなく
TB_ADDSTRINGで設定したインデックスにすれば問題無い様子・・・
空白にしたい場合はインデックスを-1とかインデックス外にする
|
|
2015/12/7(Mon) 18:35:14|NO.73490
>でもテキスト有りだと左から右のリストボックスに入れるとツールバー側のボタンが文字化けする
これは自分の勘違いだった・・・
ツールバー変更ダイアログ上で追加は新しくボタン作るんだから
文字列入れてる変数に何かしてたらそりゃ文字化けもするな・・・
|
|
2015/12/30(Wed) 04:57:19|NO.73855
複数のツールバー使うときにモジュールにしといた方が便利そうだなと色々やってたら・・・
基本的な流れ
SetTBButtonData でボタンデータIDを指定してボタンデータを登録
ToolBarAddPic で画像ファイル名やウィンドイバッファIDか-1 (HINST_COMMCTRL)を指定して画像登録
ToolBarAddButtons でツールバーハンドルとボタンデータIDを指定してコマンドIDリストを渡してボタン設置(必ず一回は実行)
(後から挿入はToolBarInsertButton)
全部のツールバー配置が終ったら
ToolBarLoad で復元処理
ToolBarReset で画像の大きさやテキストの表示方法の変更が出来る
終了時に
ToolBarSave で保存(ツールバーの座標サイズは保存してない)
ツールバー右クリックメニューからかダブルクリックで変更ダイアログが開く
おまけでテキスト表示切替や画像の大きさ変更のコンボボックスも付けた
#module "mod_tbCustomize" noInsButList,noDelButList,ButtonOnList,ButtonOnMax,TBBD_ID,HTB_List,HTBNumber,BitmapIndex,CommandID,StateStyle,Data,StringIndex,StringList,ButtonOn,ButtonDef,ButtonIDList_str,InitialNumber,BTF,SmallLarge,LeftLBHWND,RightLBHWND
#define global TOOLBAR_FIRSTID 256 //最初にToolBarAddButtons実行した時に設定されるコントロールID
#define global TOOLBAR_LASTID TOOLBAR_LASTID@mod_tbCustomize //最後にToolBarAddButtons実行した時に設定されるコントロールID
#uselib "user32.dll"
#func SetWindowLong "SetWindowLongA" int,int,int
#cfunc GetWindowLong "GetWindowLongA" int,int
#cfunc GetDC "GetDC" int
#func GetWindowText "GetWindowTextA" int,var,int
#cfunc GetWindow "GetWindow" int, int
#func GetClassName "GetClassNameA" int, var,int
#cfunc GetAncestor "GetAncestor" int,int
#cfunc IsWindow "IsWindow" int
#func ReleaseDC "ReleaseDC" int,int
#func MoveWindow "MoveWindow" int,int,int,int,int,int
#func GetClientRect "GetClientRect" int,var
#func GetWindowRect "GetWindowRect" int,var
#func ScreenToClient "ScreenToClient" int,int
#uselib "gdi32.dll"
#func GetTextExtentPoint32 "GetTextExtentPoint32A" int,sptr,int,var
#cfunc CreateDIBitmap "CreateDIBitmap" int,int,int,int,int,int
#func DeleteDC "DeleteDC" int
#func DeleteObject "DeleteObject" int
#enum TBHEAD_SIZE = 0 //ヘッダ要素数
#enum TBHEAD_INDEX //ツールバーハンドルリストインデックス
#enum TBHEAD_NB //設置ボタン数
#enum TBHEAD_FTB //テキスト表示設定
#enum TBHEAD_SL //画像大小設定
#enum TBHEAD_STYLE //ツールバースタイル
#enum HEADSIZE //ツールバー設定情報等を保存するヘッダ要素数(これを変更すると変更前に保存した物は読み込めない)
////---------------ツールバー情報をファイルから読み込みボタンを復元する
//[ ToolBarSave name, nbh, htblist ]
// name : ロードファイル名
// htblist : ロードして復元するツールバーのハンドルが入った配列「セーブしたときと同じ順序,数でハンドルが入ってる必要がある」
// stf : 復元時にボタンステータスも復元するかの設定(省略時0)「0なら復元する」
// shidx : 復元するツールバーのハンドルが入ってる要素数(省略時0)「0なら最初から復元」
// ntbh : 復元するツールバーの数(省略時0)「shidxから何個復元するか、0なら残り全て」
//戻り値1:statが0ならファイルがあった、-1なら無かった
//戻り値2:refstrに復元したボタンのコマンドIDが返る「","で区切られてツールバー毎に改行されてる」
#deffunc ToolBarLoad str name,array htblist,int stf,int shidx,int ntbh,local index,local total_savesize,local chksum
exist name
if strsize<0 {return -1}
total_savesize=strsize-4 //チェックサム分の4バイトを除く
dim slist,strsize/4
bload name,slist
repeat total_savesize/4
chksum+lpeek(slist,cnt*4)+HEADSIZE
loop
if chksum ! lpeek(slist,total_savesize) {dialog name+" が壊れてる可能性があります":return -1}
tbbid_list_refstr=""
_ntbh=ntbh
repeat
sdim tbbid_list_str
hidx=slist(index+TBHEAD_INDEX)
if length(htblist)<=hidx {break}
h_tb=htblist(hidx)
_nb=slist(index+TBHEAD_NB)
if hidx>=shidx {_ntbh--}
TBLOCALID=GetWindowLong(h_tb,-12)-TOOLBAR_FIRSTID
if TBLOCALID>=0 and hidx>=shidx {
sendmsg h_tb,0x0418,0,0//TB_BUTTONCOUNT
if stat>0{
repeat stat
sendmsg h_tb,0x0416,0,0 //TB_DELETEBUTTON
loop
}
repeat _nb
_index=index+HEADSIZE+cnt*5
tbbid_list_str+=str(slist(_index+1))
if (cnt+1)>=_nb{break}
tbbid_list_str+","
loop
MVI=MODINDEX(TBLOCALID)
set_bttexonoff _TBBUTTON(MVI),slist(index+TBHEAD_FTB)
_ftb=stat
set_SmallLarge _TBBUTTON(MVI),slist(index+TBHEAD_SL)
_SL=stat
sendmsg h_tb, 0x0438, 0,(slist(index+TBHEAD_STYLE)|4)^4//TB_SETSTYLE
ToolBarAddButtons h_tb,get_tbbdid(_TBBUTTON(MVI)),_nb,tbbid_list_str,_ftb,_SL
index+HEADSIZE
repeat _nb*(stf=0)
sendmsg h_tb,0x0411,slist(index+cnt*5+1),slist(index+cnt*5+2)&$ff //TB_SETSTATE
loop
tbbid_list_refstr+tbbid_list_str
}else{index+HEADSIZE}
index+=_nb*5
if index*4>=total_savesize or (_ntbh=0 and ntbh!0) {break}
tbbid_list_refstr+"\n"
loop
mref _stat,64
_stat=0
return tbbid_list_refstr
////---------------ツールバー情報をファイルに保存
//[ ToolBarSave name, nbh, htblist ]
// name : セーブファイル名
// ntbh : 保存するツールバーの数
// htblist : 保存するツールバーのハンドルが入った配列
#deffunc ToolBarSave str name,int ntbh,array htblist,local total_savesize,local chksum
//セーブデータ構造(HEADSIZEはヘッダ要素数)
//save_tbdat(0)=HEADSIZE,ツールバーハンドルリストインデックス,設置ボタン数,テキスト表示設定,画像大小設定
//save_tbdat(HEADSIZE〜)=TBBUTTON構造体が設置ボタン数分続く
//二つ目のツールバーはヘッダ要素数から始める
//最後に簡単なチェックサムを4バイト追加して保存
dim GETBUTTON,5
sdim slist,1024
sdim save_tbdat
repeat ntbh
h_tb=htblist(cnt)
TBLOCALID=GetWindowLong(h_tb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0 { continue }
sendmsg h_tb,0x0418,0,0//TB_BUTTONCOUNT
bcnt(cnt)=stat
memexpand save_tbdat,bcnt(cnt)*20+HEADSIZE*4
dupptr save_tbdat_dup,varptr(save_tbdat),bcnt(cnt)*20+HEADSIZE*4,4
MVI=MODINDEX(TBLOCALID)
set_bttexonoff _TBBUTTON(MVI),-1
_ftb=stat
set_SmallLarge _TBBUTTON(MVI),-1
_SL=stat
_tbbdid=get_tbbdid(_TBBUTTON(MVI))
sendmsg h_tb, 0x0439, 0, 0//TB_GETSTYLE
save_tbdat_dup=HEADSIZE,cnt,bcnt(cnt),_ftb,_SL,stat //一つのツールバーの基本情報
if bcnt(cnt)>0 {
repeat bcnt(cnt)
sendmsg h_tb,0x0417,cnt,varptr(save_tbdat_dup(cnt*5+HEADSIZE))//TB_GETBUTTON
loop
}
savesize=bcnt(cnt)*20+HEADSIZE*4
memexpand slist,total_savesize+savesize+4
memcpy slist,save_tbdat_dup,savesize,total_savesize
total_savesize+savesize
loop
if total_savesize>0 {
repeat total_savesize/4
chksum+lpeek(slist,cnt*4)+HEADSIZE
loop
lpoke slist,total_savesize,chksum
bsave name,slist,total_savesize+4
}
return
////---------------IDを指定してTBBUTTON構造体を登録する
//[ SetTBButtonData tbbdid, ntbb, tbbdat, bmSI, bmLI, bmSS, bmLS }
// tbbdid : ボタンデータID「任意で0以上を指定」
// ntbb : 登録するTBBUTTONの数
// tbbdat : 登録するTBBUTTON構造体
// bmSI : 小さい画像のBITMAPインデックス「通常0か省略してください」( 同じボタンデータIDの場合bmSI, bmLI, bmSS, bmLSは初回のみ有効)
// bmLI : 大きい画像のBITMAPインデックス「最初に大きい画像をTB_ADDBITMAPした時の戻り値を指定」(サイズが一種類なら0か省略)
// bmSS : 小さい画像のサイズ(規定値16)「0の場合16を設定」
// bmLS : 大きい画像のサイズ(規定値24)「0の場合24を設定、但しbmLIが0の場合bmSSと同じにして大小の設定の影響を無くす」
#deffunc SetTBButtonData int tbbdid, int ntbb,var tbbdat,int bmSI,int bmLI,int bmSS,int bmLS
tbbindexon(tbbdid) | 0
if tbbindexon(tbbdid)=0 {
newmod _TBBUTTON,mod_tbCustomize,tbbdid,ntbb
tbbindex(tbbdid)=stat
tbbindexon(tbbdid)=1
bitmapstartindex(tbbdid*2)=bmSI,bmLI
bitmapsize(tbbdid*2)=bmSS+(bmSS=0)*16
bitmapsize(tbbdid*2+1)=bmLS+((bmLI=0) and (bmLS=0))*bitmapsize(tbbdid*2)+((bmLI>0) and (bmLS=0))*24
bitmapstartindex(tbbdid*2+1)=(bitmapstartindex(tbbdid*2+1)*bitmapsize(tbbdid*2))/bitmapsize(tbbdid*2+1)
}
dupptr tbbdat_dup, varptr(tbbdat),ntbb*20,4
repeat ntbb
set_modbt _TBBUTTON(tbbindex(tbbdid)),tbbdat_dup,cnt
loop
return
////---------------ボタンデータIDとコマンドIDリストを渡してツールバーにボタンを追加する
//[ ToolBarAddButtons htb, tbbdid, nb, tbbid_list, tbbtexf, SL ](ツールバーを作った後に必ず一回は実行する必要がある)
// htb : ツールバーハンドル
// tbbdid : ボタンデータID「SetTBButtonDataで指定したID」(同じツールバーハンドルに違うボタンデータIDを使用しても無視されます)
// nb : 追加するボタンの数「0の場合もツールバーのサイズ調整とモジュール内設定が行われるので必ず実行してください」
// tbbid_list : 追加するボタンのIDリスト「int型配列か "1,2,0,3,4" 形式が入ったstr型変数での指定も出来る」
// tbbtexf : テキストの表示有無指定「0=下にテキスト表示、1=右にテキスト表示、2=TBSTYLE_LISTを設定しBTNS_SHOWTEXTが指定される物のみテキスト表示、3=TBSTYLE_LISTを設定しBTNS_SHOWTEXTを削除してテキスト非表示」
// SL : 画像の大きい小さい指定「0=小さい、1=大きい 」
#deffunc ToolBarAddButtons int htb,int tbbdid, int nb,var tbbid_list, int tbbtexf,int SL
dim GETBUTTON,5
dim rows,4
dim rect,4
if nb {
if vartype(tbbid_list)=2 {
dup temp_dup, tbbid_list
split temp_dup,",",tbidlist_str
dim tbidlist,nb
repeat nb
tbidlist(cnt)=int(tbidlist_str(cnt))
loop
dupptr tbidlist_dup,varptr(tbidlist),nb*4,4
}else{
dupptr tbidlist_dup, varptr(tbbid_list),nb*4,4
}
}
if GetWindowLong(htb,-12)>=TOOLBAR_FIRSTID {//GWL_ID
TBLOCALID=stat-TOOLBAR_FIRSTID
MVI=MODINDEX(TBLOCALID)
set_bttexonoff _TBBUTTON(MVI),-1 : _ftb=stat
set_SmallLarge _TBBUTTON(MVI),-1 : _SL=stat
}else{
TBLOCALID=ADDTBID
MVI=tbbindex(tbbdid)
MODINDEX(TBLOCALID)=MVI
TOOLBAR_LASTID=TOOLBAR_FIRSTID+TBLOCALID
ADDTBID++
SetWindowLong htb,-12,TOOLBAR_FIRSTID+TBLOCALID
Initial_ToolBar _TBBUTTON(MVI),htb,nb,tbidlist_dup,tbbtexf,SL,_ftb,_SL
VertWidthLiset(TBLOCALID) | 0
if VertWidthLiset(TBLOCALID)=0 {VertWidthLiset(TBLOCALID)=48}
sendmsg htb, 0x0439, 0, 0//TB_GETSTYLE
style_def(TBLOCALID)=stat
}
_tbbdid=get_tbbdid(_TBBUTTON(MVI))
sendmsg htb, 0x0439, 0, 0//TB_GETSTYLE
style_temp=stat
VERT=style_temp&$80
if _ftb=0 {style_temp=((stat| 0x1000)^0x1000)| (((style_temp&$88)>0)*(stat&$1)*4)
}else{style_temp=((stat| 0x1000) )| (((style_temp&$88)>0)*(stat&$1)*4)
}
if (style_def(TBLOCALID)&4)=0 and VERT=0{
if ((style_temp&4)=4) and ((style_temp&8)=0) {style_temp^4}
}
sendmsg htb, 0x0438, 0,style_temp//TB_SETSTYLE
testfsize=" "
dim mes_size_bt,2
t_dc=GetDC(htb)
GetTextExtentPoint32 t_dc,testfsize,strlen(testfsize),mes_size_bt //ツールバーのフォントの高さを取得(手抜き)
ReleaseDC htb,t_dc
sendmsg htb, 0x0420, 0,(bitmapsize(_tbbdid*2+_SL)<<16)|bitmapsize(_tbbdid*2+_SL) //TB_SETBITMAPSIZE
if nb {
dim tbb,5*nb
if VERT {
if _ftb<=1 {substyle=$1000}else{substyle=$4000}
if _ftb=2 {addstyle=$20:substyle=0}else{addstyle=$5060}
}else{addstyle=$5000*(_ftb=1)}
repeat nb
get_modbtlist _TBBUTTON(MVI),tbb,tbidlist_dup,cnt
if (tbb(cnt*5+2)&256)=0 {tbb(cnt*5)+bitmapstartindex(_tbbdid*2+_SL)}
if VERT {tbb(cnt*5+2)=(tbb(cnt*5+2)|addstyle)^substyle}else{tbb(cnt*5+2)|addstyle}
loop
sendmsg htb,0x0414, nb, varptr(tbb)//TB_ADDBUTTONS
}else{
sendmsg htb,0x0418,0,0//TB_BUTTONCOUNT
if stat=0 {
GETBUTTON=-1,0,0,0,varptr(testfsize)
sendmsg htb,0x0414, 1, varptr(GETBUTTON)//TB_ADDBUTTONS
}
}
if VERT{
dim rect,4
if _ftb=0 {
sendmsg htb,0x041f, 0, ((bitmapsize(_tbbdid*2+_SL)+mes_size_bt(1))<<16)|VertWidthLiset(TBLOCALID)// TB_SETBUTTONSIZE
}else{
sendmsg htb,0x041f, 0, $10001// TB_SETBUTTONSIZE
}
GETBUTTONSIZE(TBLOCALID)=getbmaxsizex@mod_tbCustomize(htb,bitmapsize(_tbbdid*2+_SL))
dim recty,2
sendmsg htb, 0x0463, 1,varptr(recty)//TB_GETIDEALSIZE
}else{
sendmsg htb,0x041f, 0, $10001// TB_SETBUTTONSIZE
sendmsg htb, 0x0439, 0, 0//TB_GETSTYLE
style_temp=stat
if (_ftb=0) and ((style_temp&0x1000)=0){
sendmsg htb,0x041f, 0, ((bitmapsize(_tbbdid*2+_SL)+mes_size_bt(1))<<16)|bitmapsize(_tbbdid*2+_SL)//+stat// TB_SETBUTTONSIZE
}
dim rectx,2
sendmsg htb, 0x0463, 0,varptr(rectx)//TB_GETIDEALSIZE
if (style_temp&8)=0{sendmsg htb,0x0421, 0, 0}// TB_AUTOSIZE
sendmsg htb,0x043a, 0,0// TB_GETBUTTONSIZE
GETBUTTONSIZE(TBLOCALID)=stat&$ffff
}
gosub *_toolbarsize
if GETBUTTON=-1{sendmsg htb,0x0416,0,0}//TB_DELETEBUTTON
return TOOLBAR_FIRSTID+TBLOCALID
*_toolbarsize
dim rect,ADDTBID*4
repeat ADDTBID
GetWindowRect TBhwnd(cnt),rect(cnt*4)
loop
cntVERT=0
topy=0
btoy=0
repeat ADDTBID
sendmsg TBhwnd(cnt), 0x0439, 0, 0//TB_GETSTYLE
tbstyle=stat
if (tbstyle&$80)=0 {
if (tbstyle&4)=4 or (tbstyle&8)=8{
dim rectx,2
sendmsg TBhwnd(cnt), 0x0463, 0,varptr(rectx)//TB_GETIDEALSIZE
ScreenToClient GetWindow(TBhwnd(cnt),2), varptr(rect(cnt*4))
sendmsg TBhwnd(cnt),0x043a, 0,0// TB_GETBUTTONSIZE
MoveWindow TBhwnd(cnt),rect(cnt*4),rect(cnt*4+1),rectx,(stat>>16)+4,1
}else{
if (tbstyle&3)=1{topy=rect(cnt*4+3)-rect(cnt*4+1)}
if (tbstyle&3)=3{btoy=rect(cnt*4+3)-rect(cnt*4+1)}
}
}else{
LEFT_RIGHT(cntVERT)=(tbstyle&11)
indexVERT(cntVERT)=cnt
cntVERT++
}
loop
dim recty,2
repeat cntVERT
iv=indexVERT(cnt)
if LEFT_RIGHT(cnt)&1{
if LEFT_RIGHT(cnt)&8{
sendmsg TBhwnd(iv), 0x0463, 1,varptr(recty)//TB_GETIDEALSIZE
ScreenToClient hwnd, varptr(rect(iv*4))
if rect(iv*4+1)<topy { rect(iv*4+1)=topy}
MoveWindow TBhwnd(iv),rect(iv*4),rect(iv*4+1),GETBUTTONSIZE(iv),recty(1)+4,1
}else{
MoveWindow TBhwnd(iv),(ginfo_winx-GETBUTTONSIZE(iv))*(LEFT_RIGHT(cnt)=3),topy,GETBUTTONSIZE(iv),ginfo_winy-(btoy+topy),1
}
}else{
sendmsg TBhwnd(iv), 0x0463, 1,varptr(recty)//TB_GETIDEALSIZE
ScreenToClient hwnd, varptr(rect(iv*4))
MoveWindow TBhwnd(iv),rect(iv*4),rect(iv*4+1),GETBUTTONSIZE(iv),recty(1),1
}
loop
return
////---------------縦型のツールバーの幅を設定
//[ ToolBarVertWidth htb, VertWidth ]
// htb : ツールバーハンドル
// VertWidth : 縦型のツールバーの幅(省略時48)
#deffunc ToolBarVertWidth int htb, int VertWidth
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return -1}
if VertWidth>0 { VertWidthLiset(TBLOCALID)=VertWidth+48*(VertWidth=0)}
MVI=MODINDEX(TBLOCALID)
set_bttexonoff _TBBUTTON(MVI),-1
_ftb=stat
set_SmallLarge _TBBUTTON(MVI),-1
_SL=stat
_tbbdid=get_tbbdid(_TBBUTTON(MVI))
sendmsg htb, 0x0439, 0, 0//TB_GETSTYLE
if stat&$80{
dim rect,4
if _ftb=0 {
sendmsg htb,0x041f, 0, ((bitmapsize(_tbbdid*2+_SL)+mes_size_bt(1))<<16)|VertWidthLiset(TBLOCALID)//+PADDING// TB_SETBUTTONSIZE
}else{
sendmsg htb,0x041f, 0, $10001// TB_SETBUTTONSIZE
}
dim recty,2
sendmsg TBhwnd(iv), 0x0463, 1,varptr(recty)//TB_GETIDEALSIZE
GETBUTTONSIZE(TBLOCALID)=getbmaxsizex@mod_tbCustomize(htb,bitmapsize(_tbbdid*2+_SL))
}
gosub *_toolbarsize
return 0
#defcfunc local getbmaxsizex int htb,int bsx_max
bsxmax=bsx_max
lotalsizey=0
sendmsg htb,0x0418,0,0//TB_BUTTONCOUNT
repeat stat
sendmsg htb,0x0417,cnt,varptr(GETBUTTON)//TB_GETBUTTON
sendmsg htb,0x041d, cnt, varptr(rect)//TB_GETITEMRECT
if GETBUTTON(1)>0 {
bsx=rect(2)-rect
if bsxmax<bsx {bsxmax=bsx}
}
loop
return bsxmax
////---------------ツールバーにボタンを挿入する
//[ ToolBarInsertButton htb, ib, iscid ]
// htb : ツールバーハンドル「必ず先にToolBarAddButtonsで使用したハンドルを使用してください」
// ib : 0から始まる挿入するインデックス「指定したインデックスの左側に挿入される」
// iscid : 挿入するコマンドID「予めボタンデータがSetTBButtonDataで登録してある必要がある」
#deffunc ToolBarInsertButton int htb, int ib,int iscid
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return -1}
MVI=MODINDEX(TBLOCALID)
set_SmallLarge _TBBUTTON(MVI),-1
_SL=stat
set_bttexonoff _TBBUTTON(MVI),-1
_ftb=stat
_tbbdid=get_tbbdid(_TBBUTTON(MVI))
cid_var=iscid
if iscid<0 {
sendmsg htb, 0x0439, 0, 0//TB_GETSTYLE
if stat&$80 {
if _ftb=0 {
sendmsg htb,0x041f, 0, ((bitmapsize(_tbbdid*2+_SL)+mes_size_bt(1))<<16)|VertWidthLiset(TBLOCALID)// TB_SETBUTTONSIZE
}else{
sendmsg htb,0x041f, 0, $10001
}
bsxmax=bitmapsize(_tbbdid*2+_SL)
lotalsizey=0
sendmsg htb,0x0418,0,0//TB_BUTTONCOUNT
repeat stat
sendmsg htb,0x0417,cnt,varptr(GETBUTTON)//TB_GETBUTTON
sendmsg htb,0x041d, cnt, varptr(rect)//TB_GETITEMRECT
if GETBUTTON(1)>0 {
bsx=rect(2)-rect
if bsxmax<bsx {bsxmax=bsx}
}
loop
GETBUTTONSIZE(TBLOCALID)=bsxmax
dim recty,2
sendmsg htb, 0x0463, 1,varptr(recty)//TB_GETIDEALSIZE
gosub *_toolbarsize
}
return 0
}
get_modbtlist _TBBUTTON(MVI),GETBUTTON,cid_var,0
if (GETBUTTON(2)&256)=0 {GETBUTTON+bitmapstartindex(_tbbdid*2+_SL)}
sendmsg htb, 0x0439, 0, 0//TB_GETSTYLE
style_temp=stat
VERT=style_temp&$80
addstyle=$5020
if VERT {
if _ftb<=1 {substyle=$1000}else{substyle=$4000}
if _ftb=2 {addstyle=$20:substyle=0}else{addstyle=$5020}
}else{addstyle=$4000*(_ftb=1)}
if VERT {GETBUTTON(2)=(GETBUTTON(2)|addstyle)^substyle}else{GETBUTTON(2)|addstyle}
sendmsg htb,0x0415, ib, varptr(GETBUTTON)//TB_INSERTBUTTON
is_stat=stat
if is_stat ! 0{
if VERT {
dim rect,4
if _ftb=0 {
sendmsg htb,0x041f, 0, ((bitmapsize(_tbbdid*2+_SL)+mes_size_bt(1))<<16)|VertWidthLiset(TBLOCALID)// TB_SETBUTTONSIZE
}else{
sendmsg htb,0x041f, 0, $10001
}
GETBUTTONSIZE(TBLOCALID)=getbmaxsizex@mod_tbCustomize(htb,bitmapsize(_tbbdid*2+_SL))
dim recty,2
sendmsg htb, 0x0463, 1,varptr(recty)//TB_GETIDEALSIZE
gosub *_toolbarsize
}
}
return is_stat
////---------------ツールバーをリセットする(最初にToolBarAddButtonsした状態に戻す)
//[ ToolBarReset htb, rm, tbbtexf, SL ]
// htb : ツールバーハンドル
// rm : ボタン配置を初期状態に戻すかどうか「0=最初のボタン配置に戻す、1=現在のボタン配置を維持して設定を反映」
// tbbtexf : テキストの表示有無指定(省略時-1)「-1=現状維持、0=下にテキスト表示、1=右にテキスト表示、2=TBSTYLE_LISTを設定しBTNS_SHOWTEXTが指定される物のみテキスト表示、3=TBSTYLE_LISTを設定しBTNS_SHOWTEXTを削除してテキスト非表示」
// SL : 画像の大きい小さい指定(省略時-1)「-1=現状維持、0=小さい、1=大きい 」
#define global ToolBarReset(%1,%2=0,%3=-1,%4=-1) _ToolBarReset %1,%2,%3,%4
#deffunc _ToolBarReset int htb,int rm,int tbbtexf,int SL
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return -1}
MVI=MODINDEX(TBLOCALID)
dim GETBUTTON,5
if rm=0 {
get_InitialButtonIDList _TBBUTTON(MVI),tbbidlist
listmax=stat
}
del_ToolBarButton_get_idlist _TBBUTTON(MVI),listmax,tbbidlist,rm
set_SmallLarge _TBBUTTON(MVI),SL*(rm!0) | -1*(rm=0)
_SL=stat
set_bttexonoff _TBBUTTON(MVI),tbbtexf*(rm!0) | -1*(rm=0)
_ftb=stat
ToolBarAddButtons htb,get_tbbdid(_TBBUTTON(MVI)),listmax,tbbidlist,_ftb,_ftb
if rm {
dupptr BIDL_str_dup, varptr(tbbidlist),listmax*4,4
repeat listmax
sendmsg htb,0x0412,BIDL_str_dup(cnt),0//TB_GETSTATE
sendmsg htb,0x0411,BIDL_str_dup(cnt),((state(BIDL_str_dup(cnt))|$20)^$20) | (stat&$20)//TB_SETSTATE
loop
}
set_ButtonOn _TBBUTTON(MVI) //ボタンが使用されてるかのフラグを設定
setCustomizeListbox //変更ダイアログ吾開いていたら左右のリストボックスにボタンを表示
return 0
////---------------ボタンインサート禁止設定(変更ダイアログ内でインサートを禁止するかの設定)
//[ setNoInsertButton htb, _cid, nof ]
// htb : ツールバーハンドル「必ず先にToolBarAddButtonsで使用したハンドルを使用してください」
// _cid : コマンドID「必ずSetTBButtonDataで登録したIDを指定してください」
// nof : インサート禁止すかのスイッチ「-1=現状維持、0=禁止しない、1=禁止する」
//戻り値:statに現在の設定値が返る(-1ならツールバーが無かったかIDが無効)
#deffunc setNoInsertButton int htb,int _cid,int nof
if _cid<0 {return -1}
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
return (set_noInsertButton( _TBBUTTON(MVI), _cid, nof)!0)
////---------------ボタン削除禁止設定(変更ダイアログ内で削除禁止するかの設定)
//[ setNoDeleteButton htb, _cid, nof ]
// htb : ツールバーハンドル「必ず先にToolBarAddButtonsで使用したハンドルを使用してください」
// _cid : コマンドID「必ずSetTBButtonDataで登録したIDを指定してください」
// nof : 削除禁止すかのスイッチ「-1=現状維持、0=禁止しない、1=禁止する」
//戻り値:statに現在の設定値が返る(-1ならツールバーが無かった)
#deffunc setNoDeleteButton int htb,int _cid,int nof
if _cid<0 {return -1}
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
return (set_noDeleteButton( _TBBUTTON(MVI), _cid, nof)!0)
////---------------テキストの表示設定値取得(設定変更はToolBarReset命令で)
//[ 変数 = getTBTextON( htb ) ]
// htb : ツールバーハンドル
//戻り値:0=下にテキスト表示、1=右にテキスト表示、2=TBSTYLE_LISTを設定しBTNS_SHOWTEXTが指定される物のみテキスト表示、3=TBSTYLE_LISTを設定しBTNS_SHOWTEXTを削除してテキスト非表示
#defcfunc getTBTextON int htb
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
set_bttexonoff _TBBUTTON(MVI),-1
return stat
////---------------画像の大小設定値取得(設定変更はToolBarReset命令で)
//[ 変数 = getTBSmallLarge( htb ) ]
// htb : ツールバーハンドル
//戻り値:0=小さい、1=大きい
#defcfunc getTBSmallLarge int htb
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
set_SmallLarge _TBBUTTON(MVI),-1
return stat
////---------------登録したボタンデータを設定も反映させて取得(実際に設置されてるボタンから取得する訳ではない)
//[ getButtonData htb, _cid, _tbb ]
// htb : ツールバーハンドル
// _cid : コマンドID
// _tbb : TBBUTTONを取得する配列
#deffunc getButtonData int htb,int _cid,array _tbb
TBLOCALID=GetWindowLong(htb,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
tbbid=_cid
get_modbtlist _TBBUTTON(MVI),_tbb,tbbid,0
return stat
#define TEMP_WINIDA 1001 //ToolBarAddPicで使用される作業用bufferID
#define TEMP_WINIDB 1002
////---------------ツールバーボタンに使用する画像を追加します(TB_ADDBITMAP)
//[ ToolBarAddPic %1, %2, %3, %4 ]
// %1 : ツールバーハンドル
// %2 : 追加する画像がbufferにあるならIDをファイルならファイル名をHINST_COMMCTRLなら-1を指定(省略時-2)「-2=現在の操作先ウィンドウ、-1=HINST_COMMCTRL、0以上=ウィンドID、"文字列"=ファイル名」
// %3 : 追加する画像の数(省略時0)「0=画像Xサイズ(バッファサイズ)/一つ分の画像サイズ、%2を-1にした場合はボタンイメージのビットマップのリソースIDになる」
// %4 : 一つ分の画像サイズ(省略時16)「縦横サイズとして使われる(%2が-1の場合無視される)」
//戻り値:一つ目が追加された位置(インデックス)が返ります。失敗した場合は-1
#define global ToolBarAddPic(%1,%2=-2,%3=0,%4=16) _ToolBarAddPic %1,int(%2),str(%2),%3,%4
#deffunc _ToolBarAddPic int htb,int bid ,str fname,int picmax,int size
if bid ! -1 {
gsel_bak=ginfo_sel
gsel 0
hdc_disp=GetDC(hwnd)
dim BITMAPINFOHEADER,10
if fname=str(bid) or bid<0{
if bid<0 {gsel gsel_bak}else{gsel bid}
copyid=ginfo_sel
pget 0,0
gr=ginfo_r:gg=ginfo_g:gb=ginfo_b
if (picmax>0) {_picmax=picmax}else{_picmax=ginfo_sx/size}
buffer TEMP_WINIDB,size*_picmax,size
syscolor 15: boxf
gmode 4,ginfo_sx,ginfo_sy,256
color gr,gg,gb
gcopy copyid
}else{
buffer TEMP_WINIDA
picload fname
pget 0,0
gr=ginfo_r:gg=ginfo_g:gb=ginfo_b
if (picmax>0) {_picmax=picmax}else{_picmax=ginfo_sx/size}
buffer TEMP_WINIDB,size*_picmax,size
syscolor 15: boxf
Ext= getpath(getpath(fname,2),16)
if Ext=".png" {
picload fname,1
}else{
gmode 4,ginfo_sx,ginfo_sy,256
color gr,gg,gb
gcopy TEMP_WINIDA
}
}
mref VRAM,66
mref BMSCR,67
BITMAPINFOHEADER=40,ginfo_sx,ginfo_sy
hwnd_bmp(hwnd_bmp_cnt)=CreateDIBitmap( hdc_disp, varptr(BITMAPINFOHEADER), 4, BMSCR(5), BMSCR(6), 0 )
tbadd= 0,hwnd_bmp(hwnd_bmp_cnt)
hwnd_bmp_cnt++
DeleteDC hdc_disp
gsel gsel_bak
}else{
tbadd= bid,picmax
_picmax=0
}
sendmsg htb, 0x0413 , _picmax ,varptr(tbadd) //TB_ADDBITMAP
return stat
#deffunc hwndbmpdel onexit
repeat hwnd_bmp_cnt
DeleteObject hwnd_bmp(cnt)
loop
return
/////////////////////////////ここからツールバーの変更ダイアログが開いてる時限定の命令定義//////////////////////////////////////////////////////////////////////
////---------------ツールバーの変更ダイアログとリストボックスのハンドルを取得(その他も文字列でシステム変数に入る)
//[ getCustomizeListbox l_Param, htbc, hlb, hrb, ListBoxcnt ](必ず割り込みTBN_INITCUSTOMIZE内で実行)
// l_Param : lParam「WM_NOTIFY割り込み時のシステム変数」
// htbc : ツールバーの変更ダイアログのハンドル
// hlb : 左のリストボックスのハンドル
// hrb : 右のリストボックスのハンドル
// ListBoxcnt : 発見したリストボックスの数
//戻り値1:statが0ならrストボックスが二つとも見つかった、1なら見つけてから閉じられていない、-1ならなんらかの不具合
//戻り値2:refstrに変更ダイアログ上のもの全て "クラスネーム,ハンドル,表示テキスト" の並びで改行されて代入される
#deffunc getCustomizeListbox int l_Param,var htbc,var hlb,var hrb,var ListBoxcnt
dupptr _nmhdr,l_Param,16,4
TBLOCALID=GetWindowLong(_nmhdr,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return -1}
MVI=MODINDEX(TBLOCALID)
if set_LBHWND(_TBBUTTON(MVI), hlb,hrb,1) = 2 {set_ButtonOn _TBBUTTON(MVI):return 1}
hToolBar=_nmhdr
hCustom=_nmhdr(3)
htbc=hCustom
temp_hwnd=htbc
sdim text,256
ListBoxcnt=0
objliststr=""
repeat
if GetWindow(temp_hwnd,2+(cnt=0)*3) {//ツールバーの変更ダイアログ内の子ウィンドウハンドルを全て取得
temp_hwnd=stat
if GetAncestor(temp_hwnd,1) ! htbc {break}//親が変更ダイアログじゃないなら終了
GetClassName temp_hwnd,ClassName,255
text=""
GetWindowText temp_hwnd,text,255
objliststr+strf("%s %d %s\n",ClassName,temp_hwnd,text)
if ClassName="ListBox" { //ListBox_hwnd(0)=左側のリストボックスハンドル、ListBox_hwnd(1)=右側のリストボックスハンドル
if ListBoxcnt=0 {hlb=temp_hwnd}else{hrb=temp_hwnd}
sendmsg temp_hwnd, 0x01A1, 0,0 //LB_GETITEMHEIGHT
ListBoxHEIGHT=stat
ListBoxcnt++
}
}else{break}
loop
set_ButtonOn _TBBUTTON(MVI) //ボタンが使用されてるかのフラグを設定
mref _stat,64
if ListBoxcnt=2 {
temp=set_LBHWND(_TBBUTTON(MVI),hlb,hrb,0)
_stat=0
}else{_stat=-1}
return objliststr
////---------------ダミーボタン削除
//[ delDummyButtton ](必ず割り込みTBN_TOOLBARCHANGE内で実行)
//戻り値:statにダミーから本来のボタンに置き換わったコマンドIDが返る。-1の場合削除されなかった
#deffunc delDummyButtton
if IsWindow(hCustom)=0 {return -1}
TBLOCALID=GetWindowLong(hToolBar,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return -1}
MVI=MODINDEX(TBLOCALID)
sendmsg hToolBar,0x0418,0,0//TB_BUTTONCOUNT
return Del_DummyButtton(_TBBUTTON(MVI),stat)
////---------------左右のリストボックスにボタンを表示(ToolBarReset内で使用されてる)
//[ setCustomListbox ](変更ダイアログを開いてる状態でToolBarAddButtons。ToolBarAddButtonsを使用しない限り単体で使うことは無い)
#deffunc setCustomizeListbox
if IsWindow(hCustom)=0 {return -1}
TBLOCALID=GetWindowLong(hToolBar,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
set_RightListbox _TBBUTTON(MVI)
set_LeftListbox _TBBUTTON(MVI)
return 0
////---------------使用中のボタンを右のリストボックスに表示
//[ setRightListbox ](変更ダイアログを開いてる状態でToolBarAddButtonsを使用しない限り単体で使うことは無い)
#deffunc setRightListbox
if IsWindow(hCustom)=0 {return -1}
TBLOCALID=GetWindowLong(hToolBar,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
set_RightListbox _TBBUTTON(MVI)
return 0
////---------------未使用のボタンを左のリストボックスに表示(retButtonInfo内で使用されてる)
//[ setLeftListbox ](変更ダイアログを開いてる状態でSetTBButtonDataを使用しない限り単体で使うことは無い)
#deffunc setLeftListbox
if IsWindow(hCustom)=0 {return -1}
TBLOCALID=GetWindowLong(hToolBar,-12)-TOOLBAR_FIRSTID
if TBLOCALID<0{return -1}
MVI=MODINDEX(TBLOCALID)
set_LeftListbox _TBBUTTON(MVI)
return 0
////インサート禁止するかのフラグを返す(割り込みreturn用の値なので設定値とは違う)
//[ 変数 = getNoInsertButton( l_Param ) ](必ず割り込みTBN_QUERYINSERT内で実行)
// l_Param : lParam「WM_NOTIFY割り込み時のシステム変数」
//戻り値:インサート禁止されてたら0が返る(通常は1が返る)
#defcfunc retNoInsertButton int l_Param
dupptr NMHDR_dup,l_Param,24,4
if NMHDR_dup(5) <0 {return 0}
TBLOCALID=NMHDR_dup(1)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return 0}
MVI=MODINDEX(TBLOCALID)
return (set_noInsertButton( _TBBUTTON(MVI), NMHDR_dup(5), -1)=0)
////削除禁止するかのフラグを返す(割り込みreturn用の値なので設定値とは違う)
//[ 変数 = getNoDeleteButton( l_Param ) ](必ず割り込みTBN_QUERYDELETE内で実行)
// l_Param : lParam「WM_NOTIFY割り込み時のシステム変数」
//戻り値:削除禁止されてたら0が返る(通常は1が返る)
#defcfunc retNoDeleteButton int l_Param//_TBN_QUERYDELETE
dupptr NMHDR_dup,l_Param,24,4
if NMHDR_dup(5) <0 {return 0}
TBLOCALID=NMHDR_dup(1)-TOOLBAR_FIRSTID
if TBLOCALID<0 {return 0}
MVI=MODINDEX(TBLOCALID)
return (set_noDeleteButton( _TBBUTTON(MVI), NMHDR_dup(5), -1)=0)
////ダミーボタン情報をセットして1を返す。変更ダイアログを開いた時やリセット時は左側のリストボックスに未使用のボタンを表示させる
//[ 変数 = retButtonInfo( l_Param ) ](必ず割り込みTBN_GETBUTTONINFOA内で実行)
// l_Param : lParam「WM_NOTIFY割り込み時のシステム変数」
//戻り値:ダミ-ボタン情報を渡す必要がある時は1になる
#defcfunc retButtonInfo int l_Param
if IsWindow(hCustom)=0 {return 0}
dupptr NMHDR_dup,l_Param,4*20,4
if NMHDR_dup(5)=385 {
sendmsg NMHDR_dup,0x0418,0,0//TB_BUTTONCOUNT
BUTTONCOUNT=stat
dim GETBUTTON,5
sendmsg NMHDR_dup,0x0417,NMHDR_dup(4),varptr(GETBUTTON)//TB_GETBUTTON
sendmsg NMHDR_dup,0x0412,GETBUTTON(1),0 //TB_GETSTATE
NMHDR_dup(4)=-1,-1,$100|stat*(stat>0),BUTTONCOUNT,-1 //ダミーのボタンデータ設定
return 1
}
if NMHDR_dup(5)=49 {setLeftListbox}//使用されていないボタンを左のリストボックスに表示
return 0
/////////////////////////////ここまでツールバーの変更ダイアログが開いてる時限定の命令定義//////////////////////////////////////////////////////////////////////
//======ここからモジュール内用命令定義======//(glooalからは使わない)
//「ボタンデータ数,テキスト表示フラグ」
//m_tbbtexf:0=表示、1=条件付表示、2=非表示
#modinit int m_id,int m_tbdatmax
TBBD_ID=m_id
dim BitmapIndex,m_tbdatmax
dim BitmapIndex,m_tbdatmax
dim CommandID,m_tbdatmax
dim StateStyle,m_tbdatmax
dim Data,m_tbdatmax
dim StringIndex,m_tbdatmax
sdim StringList,64,m_tbdatmax
dim ButtonOn,m_tbdatmax
sdim ButtonIDList_str
dim noDelButList,m_tbdatmax
dim noInsButList,m_tbdatmax
LeftLBHWND=0
RightLBHWND=0
tbbnextindex++
sdim ClassName,256
return tbbnextindex-1
//「変数 = set_LBHWND( モジュール変数,左のリストボックスハンドル,右のリストボックスハンドル,0で設定1なら設定済みハンドル取得 )」
//statが2ならハンドルが両方設定済
#modcfunc set_LBHWND var m_hlb,var m_hrb,int m_m
if m_m {
if IsWindow(LeftLBHWND) {m_hlb=LeftLBHWND}else{m_hlb=0}
if IsWindow(RightLBHWND) {m_hrb=RightLBHWND}else{m_hrb=0}
return ((m_hlb!0) + (m_hrb!0))
}else{
LeftLBHWND=m_hlb
RightLBHWND=m_hrb
}
return 2
///ボタンデータID取得
//「変数 = get_tbbdid(モジュール変数)」
#modcfunc get_tbbdid
return TBBD_ID
//「set_bttexonoff モジュール変数,テキスト表示フラグ(-1=現状維持、0=下にテキスト表示、1=右にテキスト表示、2=TBSTYLE_LISTを設定してBTNS_SHOWTEXTが指定される物のみテキスト表示、3=TBSTYLE_LISTを指定してBTNS_SHOWTEXTを削除してテキスト非表示)」
//statに現在の設定が返る
#modfunc set_bttexonoff int m_tbbtexf
if m_tbbtexf<0 {
BTF(TBLOCALID) | 0
}else{
BTF(TBLOCALID)=limit(m_tbbtexf,0,3)
}
return BTF(TBLOCALID)
//ツールバー初期設定モジュール内に保存
//「Initial_ToolBar モジュール変数,ツールバーハンドル ,ボタン配置数,ボタンIDリスト,画像の大きさ切替フラグ」
//m_SL:0=小さい、1=大きい
#modfunc Initial_ToolBar int m_htb,int m_nb,array m_idl ,int m_tbbtexf,int m_SL,var _m_tbbtexf,var _m_SL
HTB_List(HTBNumber)=m_htb
HTBNumber++
TBhwnd(TBLOCALID)=m_htb
InitialNumber(TBLOCALID)=m_nb //最初に設置された数(リセット時に使用)
SmallLarge(TBLOCALID)=limit(m_SL,0,1)
_m_SL=SmallLarge(TBLOCALID)
memexpand ButtonIDList_str(TBLOCALID),m_nb*4
repeat m_nb
memcpy ButtonIDList_str(TBLOCALID),m_idl,m_nb*4//最初に設置されたリスト(リセット時に使用)
loop
set_bttexonoff thismod,m_tbbtexf
_m_tbbtexf=stat
return
//ツールバーボタン画像大きさ切替
//「set_SmallLarge モジュール変数,画像の大きさ」
//m_SL:-1=現状維持、0=小さい、1=大きい
//statに現在の設定が返る
#modfunc set_SmallLarge int m_SL
if m_SL>=0 {SmallLarge(TBLOCALID)=limit(m_SL,0,1)}
return SmallLarge(TBLOCALID)
////インサート禁止するかを設定取得
//[ 変数 = getNoInsertButton( モジュール変数,コマンドID, インサート禁止すかのスイッチ ) ]
// m_nof : インサート禁止すかのスイッチ「-1=現状維持、0=禁止しない、1=禁止する」
//戻り値 :現在の設定値が返る
#modcfunc set_noInsertButton int m_cid,int m_nof
if m_nof>=0 {noInsButList(m_cid)=m_nof>0}
return noInsButList(m_cid)
////削除禁止するかを設定取得
//[ 変数 = set_noDeleteButton( モジュール変数,コマンドID, インサート禁止すかのスイッチ ) ]
// m_nof : 削除禁止すかのスイッチ「-1=現状維持、0=禁止しない、1=禁止する」
//戻り値 :現在の設定値が返る
#modcfunc set_noDeleteButton int m_cid,int m_nof
if m_nof>=0 {noDelButList(m_cid)=m_nof>0}
return noDelButList(m_cid)
//同じボタンデータIDを使ってるツールバーボタンを一旦全て削除してから呼び出したツールバー以外を再配置して呼び出したツールバーのIDリストを取得
//「del_ToolBarButton_get_idlist モジュール変数,ボタン数を取得する配列, ボタンIDリストを取得する文字列配列(内容はint),最初の状態に戻す(0以外なら現状時)」
#modfunc del_ToolBarButton_get_idlist array m_nbl,array m_tbbidl,int m_rm
TBLOCALID_bak=TBLOCALID
MVI_bak=MVI
if m_rm=0 {
dim m_tbbidl_bak,m_nbl
m_nbl_bak=m_nbl
memcpy m_tbbidl_bak,m_tbbidl,m_nbl*4
}
dim GETBUTTON,5
sdim temp_tbbidl,,HTBNumber
idlist_index=0
repeat HTBNumber
_TBhwnd=HTB_List(cnt)
sendmsg _TBhwnd,0x0418,0,0//TB_BUTTONCOUNT
if stat>0 {
m_nbl(cnt)=stat
memexpand temp_tbbidl(cnt),m_nbl(cnt)*4
dupptr BIDL_str_dup, varptr(temp_tbbidl(cnt)),m_nbl(cnt)*4,4
repeat m_nbl(cnt)
sendmsg _TBhwnd,0x0417,0,varptr(GETBUTTON)//TB_GETBUTTON
BIDL_str_dup(cnt)=GETBUTTON(1)
state(GETBUTTON(1))=GETBUTTON(2)&$ff
sendmsg _TBhwnd,0x0416,0,0//TB_DELETEBUTTON
loop
}else{m_nbl(cnt)=0}
if _TBhwnd=TBhwnd(TBLOCALID) {
idlist_index=cnt
if m_rm=0 {
m_nbl(cnt)=m_nbl_bak
memexpand temp_tbbidl(cnt),m_nbl_bak*4
memcpy temp_tbbidl(cnt),m_tbbidl_bak,m_nbl_bak*4
}
}
loop
if m_nbl(idlist_index) {
dupptr BIDLdel_dup, varptr(temp_tbbidl(idlist_index)),m_nbl(idlist_index)*4,4
repeat HTBNumber
if idlist_index!cnt {
if m_nbl(cnt) {
dupptr BIDL_str_dup, varptr(temp_tbbidl(cnt)),m_nbl(cnt)*4,4
index_str=","
repeat m_nbl(cnt)
index_str+""+BIDL_str_dup(cnt)+","
loop
repeat m_nbl(idlist_index)
strrep index_str ,","+BIDLdel_dup(cnt)+"," ,","
loop
split index_str,",",index_str
m_nbl(cnt)=limit(stat-2,0,stat)
if m_nbl(cnt) {
repeat stat-2
BIDL_str_dup(cnt)=int(index_str(cnt+1))
loop
}
}
}
loop
}
repeat HTBNumber
if idlist_index!cnt {
if m_nbl(cnt){
dupptr BIDL_str_dup, varptr(temp_tbbidl(cnt)),m_nbl(cnt)*4,4
ToolBarAddButtons HTB_List(cnt),TBBD_ID,m_nbl(cnt),BIDL_str_dup,-1,-1
repeat m_nbl(cnt)
sendmsg h_tb,0x0411,BIDL_str_dup(cnt),state(BIDL_str_dup(cnt)) //TB_SETSTATE
loop
}
}
loop
m_nbl=m_nbl(idlist_index)
dim m_tbbidl,m_nbl
memcpy m_tbbidl,temp_tbbidl(idlist_index),m_nbl*4
TBLOCALID=TBLOCALID_bak
MVI=MVI_bak
_tbbdid=TBBD_ID
return
//ボタンデータをモジュール変数に移す
//「set_modbt モジュール変数,ボタンデータ,ボタンデータインデックス」
#modfunc set_modbt array m_tbbdat,int m_index
cid=m_tbbdat(m_index*5+1)
BitmapIndex(cid)=m_tbbdat(m_index*5)
CommandID(cid)=m_tbbdat(m_index*5+1)
StateStyle(cid)=m_tbbdat(m_index*5+2)
Data(cid)=m_tbbdat(m_index*5+3)
StringIndex(cid)=m_tbbdat(m_index*5+4)
memexpand StringList(cid),256
noDelButList(cid)=0
noInsButList(cid)=0
ButtonOn(cid)=0
ButtonDef(cid) | 0
if ButtonDef(cid) =0 {
ButtonDef(cid)=1
ButtonOnList(ButtonOnMax)=cid
ButtonOnMax++
}
return
//初期設置ボタンリストをモジュール変数に保存
//「get_InitialButtonIDList モジュール変数,最初に設置したボタンIDリスト配列」
#modfunc get_InitialButtonIDList array m_tbbid_list
dim m_tbbid_list,InitialNumber(TBLOCALID)
memcpy m_tbbid_list,ButtonIDList_str(TBLOCALID),InitialNumber(TBLOCALID)*4
return InitialNumber(TBLOCALID)
//ボタンが使用中か判定して使用してるならモジュール変数ButtonOnを1にする(コマンドIDが要素)
//[ set_ButtonOn モジュール変数 ]
#modfunc set_ButtonOn
dim GETBUTTON,5
dim ButtonOn,length(ButtonOn)
dim StateList,length(ButtonOn)
repeat HTBNumber
_TBhwnd=HTB_List(cnt)
TBLOCALID_temp=GetWindowLong(_TBhwnd,-12)-TOOLBAR_FIRSTID
if TBLOCALID_temp<0{continue }
sendmsg _TBhwnd,0x0418,0,0//TB_BUTTONCOUNT
if stat>0 {
ofsetid=bitmapstartindex(TBBD_ID*2+SmallLarge(TBLOCALID_temp))
repeat stat
sendmsg _TBhwnd,0x0417,cnt,varptr(GETBUTTON)//TB_GETBUTTON
_cid=GETBUTTON(1)
ButtonDef(_cid) | 0
if ButtonDef(_cid)=0 {set_modbt thismod, GETBUTTON,0}//未登録のIDが使われてたので登録
ButtonOn(_cid)=1
if (ofsetid+BitmapIndex(_cid)) ! GETBUTTON {BitmapIndex(_cid)=GETBUTTON}
StateList(_cid)=GETBUTTON(2)&$ff
loop
}
loop
return
//get_ButtonOn コマンドID
#modcfunc get_ButtonOn int m_cid
return ButtonOn(m_cid)
//[ del_DummyButtton モジュール変数,設置されてるボタン数 ]
//statにダミーを置き換えたコマンドIDが返る(無い場合-1)
#modcfunc del_DummyButtton int m_nb
dim GETBUTTON,5
dmycid=-1
_tbh=TBhwnd(TBLOCALID)
_sli=bitmapstartindex(TBBD_ID*2+SmallLarge(TBLOCALID))
repeat m_nb
sendmsg _tbh,0x0417,cnt,varptr(GETBUTTON)//TB_GETBUTTON
if GETBUTTON(1)=dmycid {//ダミーのボタンだった
_BUTTONCOUNT=GETBUTTON(3)
_STATE=GETBUTTON(2)
sendmsg RightLBHWND, $199 ,cnt,0 //LB_GETITEMDATA ダミーが置かれているインデックスで右側のリストボックスのデータを取得
dat=stat-_sli //ビットマップインデックス
foreach ButtonOn
if ButtonDef(cnt) {//ボタンデータがある
if BitmapIndex(cnt)=dat {//同じビットマップインデックスなら
if (StateStyle(cnt)&256)=0 {//セパレータ以外なら
dmycid=cnt
StateList(cnt) | 0
break
}
}
}
loop
if dmycid<0 {break}
sendmsg _tbh,0x0416,cnt,0 //TB_DELETEBUTTON ダミーを削除
ToolBarInsertButton _tbh,cnt,dmycid//削除されたところにボタン挿入
if _BUTTONCOUNT=m_nb {sendmsg _tbh,0x0411,dmycid,_STATE }else{
if StateList(dmycid) {sendmsg _tbh,0x0411,dmycid,StateList(dmycid)
}
}//TB_SETSTATE
break
}
loop
if dmycid<0 {
sendmsg _tbh, 0x0439, 0, 0//TB_GETSTYLE
//if stat&$80 {
ToolBarInsertButton _tbh,0,dmycid//削除されたところにボタン挿入
// }
}
return dmycid
//[ get_modbtlist モジュール変数,出力ボタンデータ配列,入力コマンドIDリスト,入力設置インデックス ]
#modfunc get_modbtlist array m_tbb,array m_tbbid_list,int m_index
cid=m_tbbid_list(m_index)
ButtonDef(cid) | 0
if ButtonDef(cid) {
if (StateStyle(cid)&256)!0 {Style=0}else{Style=$4000}//セパレータ以外なら
_BTF=$ffffffff^($1000*(BTF(TBLOCALID)>0)) ^($4000*(BTF(TBLOCALID)=3))
SS=(StateStyle(cid)&_BTF) | ( Style*(BTF(TBLOCALID)=0))
m_tbb(m_index*5)=BitmapIndex(cid),CommandID(cid),SS,Data(cid),StringIndex(cid)
}else{return -1}
return 0
//左のリストボックスに使用されてないボタンを表示
//[ set_LeftListbox モジュール変数 ]
#modfunc set_LeftListbox
sendmsg LeftLBHWND,0x000B,0,0 //WM_SETREDRAW
await 0 //リストボックスが書き換わらない部分が出るので
Nullstr=""
sepstr=""
sendmsg LeftLBHWND, $189 ,0,varptr(sepstr) //LB_GETTEXT
sendmsg LeftLBHWND, $199 ,0,0 //LB_GETITEMDATA
sep=stat
_tbh=TBhwnd(TBLOCALID)
sendmsg _tbh, 0x0439, 0, 0//TB_GETSTYLE
sendmsg LeftLBHWND,0x01A0,0,limit(bitmapsize(TBBD_ID*2+SmallLarge(TBLOCALID))+2+((stat&0x0800)=0)*6,18,bitmapsize(TBBD_ID*2+SmallLarge(TBLOCALID))+18) //LB_SETITEMHEIGHT
sendmsg LeftLBHWND,0x0184,0,0 //LB_RESETCONTENT
sendmsg LeftLBHWND,0x0180,0,sepstr //LB_ADDSTRING //sepstrの内容を変更すれば右側の 区切り の文字を変えられる
sendmsg LeftLBHWND,0x019a,0,sep //LB_SETITEMDATA
dim GETBUTTON,5
repeat ButtonOnMax
cid=ButtonOnList(cnt)
if ButtonOn(cid)=0 and noDelButList(cid)=0 {
if (StateStyle(cid)&256)=0 {
if (StringIndex(cid)&$ffff0000)=0 {
sendmsg _tbh,0x045c,(StringIndex(cid)<<16),0//TB_GETSTRINGA
if stat>0 {
_strsize=stat*2+1
if _strsize>63 {memexpand StringList(cid),_strsize}
sendmsg _tbh,0x045c,(StringIndex(cid)<<16)|_strsize,varptr(StringList(cid))//TB_GETSTRINGA
}else{
StringList(cid)=""
}
}else{
if StringIndex(cid) ! -1 {
dupptr String_dup,StringIndex(cid),64,2
StringList(cid)=String_dup
}else{
StringList(cid)=""
}
}
sendmsg LeftLBHWND,0x0180,0,varptr(StringList(cid)) //LB_ADDSTRING
sendmsg LeftLBHWND,0x019a,stat,BitmapIndex(cid)+bitmapstartindex(TBBD_ID*2+SmallLarge(TBLOCALID)) //LB_SETITEMDATA
}
}
loop
sendmsg LeftLBHWND,0x0186,0,0 //LB_SETCURSEL
sendmsg LeftLBHWND,0x000B,1,0 //WM_SETREDRAW
return
//右のリストボックスに使用されてるボタンを表示
//[ set_RightListbox モジュール変数 ]
#modfunc set_RightListbox
sendmsg RightLBHWND,0x000B,0,0 //WM_SETREDRAW
await 0 //リストボックスが書き換わらない部分が出るので
Nullstr=""
sepstr=""
sendmsg LeftLBHWND, $189 ,0,varptr(sepstr) //LB_GETTEXT
sendmsg LeftLBHWND, $199 ,0,0 //LB_GETITEMDATA
sep=stat
sendmsg RightLBHWND,0x018B,0,0 //LB_GETCOUNT
sendmsg RightLBHWND, $199 ,stat-1,0 //LB_GETITEMDATA
Lastsep=stat
_tbh=TBhwnd(TBLOCALID)
sendmsg _tbh, 0x0439, 0, 0//TB_GETSTYLE
sendmsg RightLBHWND,0x01A0,0,limit(bitmapsize(TBBD_ID*2+SmallLarge(TBLOCALID))+2+((stat&0x0800)=0)*6,18,bitmapsize(TBBD_ID*2+SmallLarge(TBLOCALID))+18) //LB_SETITEMHEIGHT
sendmsg RightLBHWND,0x0184,0,0 //LB_RESETCONTENT
sendmsg RightLBHWND,0x0181,0,sepstr //LB_INSERTSTRING //一番下の 区切り の文字列
sendmsg RightLBHWND,0x019a,0,Lastsep //LB_SETITEMDATA //一番下の 区切り のDATA
dim GETBUTTON,5
sendmsg _tbh,0x0418,0,0//TB_BUTTONCOUNT
repeat stat
sendmsg _tbh,0x0417,cnt,varptr(GETBUTTON)//TB_GETBUTTON
dat=GETBUTTON(0)
cid=GETBUTTON(1)
sendmsg _tbh,0x042d, cid, 0//TB_GETBUTTONTEXTA
if stat>63{ memexpand StringList(cid),stat+1}
sendmsg _tbh,0x042d, cid, varptr(StringList(cid))//TB_GETBUTTONTEXTA
if (GETBUTTON(2)&256) {dat=sep:strptr=sepstr}else{strptr=StringList(cid)}
sendmsg RightLBHWND,0x0181,cnt,strptr //LB_INSERTSTRING
sendmsg RightLBHWND,0x019a,stat,dat //LB_SETITEMDATA
loop
sendmsg RightLBHWND,0x0186,0,0 //LB_SETCURSEL
sendmsg RightLBHWND,0x000B,1,0 //WM_SETREDRAW
return
//======モジュール内用命令定義終わり======//
#global
#uselib "comctl32.dll"
#func InitCommonControls "InitCommonControls"
#uselib "user32.dll"
#func SetMenu "SetMenu" int,int
#func GetWindowRect "GetWindowRect" int,var
#func SetWindowPos "SetWindowPos" int,int,int,int,int,int,int
#func SetParent "SetParent" int,int
#func CreatePopupMenu "CreatePopupMenu"
#func TrackPopupMenuEx "TrackPopupMenuEx" int,int,int,int,int,int
#func AppendMenu "AppendMenuA" int,int,int,sptr
#func DestroyMenu "DestroyMenu" int
#func ClientToScreen "ClientToScreen" int,int
#func ReleaseCapture "ReleaseCapture"
#define WM_COMMAND 0x0111
#define WM_NOTIFY 0x004E
#define TB_BUTTONSTRUCTSIZE 0x041E
#define TB_ADDBITMAP 0x0413
#define TB_AUTOSIZE 0x0421
#define TB_ADDBUTTONS 0x0414
#define TB_SETEXTENDEDSTYLE 0x0454
#define TB_GETRECT 0x0433
#const TB_BUTTONCOUNT 0x0418
#const TB_DELETEBUTTON 0x0416
#define TB_CUSTOMIZE 0x041B
#define TBSTYLE_EX_DRAWDDARROWS 1
#define TBSTYLE_EX_MIXEDBUTTONS 0x00000008
//ツールバーボタン画像(小)
buffer 10,16,16
color 200,100,150
boxf 4,2,4+8,14
//ツールバーボタン画像(大)
buffer 11,24,24
color 200,100,150
boxf 6,3,6+12,21
screen 0,640,480
onexit *OnClose
InitCommonControls
#define TBSTYLE_AUTOSIZE 0x10
#enum STD_CUT = 0 //切り取り
#enum STD_COPY //コピー
#enum STD_PASTE //貼り付け
#enum STD_UNDO //アンドゥ
#enum STD_REDOW //リドゥ
#enum STD_DELETE // 削除
#enum STD_FILENEW //新規作成
#enum STD_FILEOPEN //開く
#enum STD_FILESAVE //保存
#enum STD_PRINTPRE //印刷プレビュー
#enum STD_PROPERTIES //プロパティ
#enum STD_HELP //ヘルプ
#enum STD_FIND // 検索
#enum STD_REPLACE //置換
#enum STD_PRINT //印刷
#enum VIEW_LARGEICONS // 大きいアイコン
#enum VIEW_SMALLICONS // 小さいアイコン
#enum VIEW_LIST // 一覧表示
#enum VIEW_DETAILS // 詳細表示
#enum VIEW_SORTNAME // 名前順に整列
#enum VIEW_SORTSIZE // サイズ順に整列
#enum VIEW_SORTDATE // 日付順に整列
#enum VIEW_SORTTYPE // 種類順に整列
#enum VIEW_PARENTFOLDER // 上のフォルダへ
#enum VIEW_NETCONNECT // ネットワークドライブへ接続
#enum VIEW_NETDISCONNECT // ネットワークドライブから切断
#enum VIEW_NEWFOLDER // 新しいフォルダ
#enum HIST_BACK // 前へ
#enum HIST_FORWARD // 次へ
#enum HIST_FAVORITES // お気に入り
#enum HIST_ADDTOFAVORITES // お気に入りに追加
#enum HIST_VIEWTREE // ツリー表示
#enum MY_VERTICAL // 縦横切替
//ビットマップインデックスに合わせたボタン名とStyleとState
tbString="切り取り","コピー","貼り付け","アンドゥ","リドゥ","削除","新規作成","開く","保存","印刷プレビュー","プロパティ","ヘルプ","検索","置換","印刷"
StyleState= 0x1204, 0x1004, 0x1004, 0x1004, 0x1004,0x1004, 0x1804,0x1004,0x1004, 0x1004, 0x1004, 0x1004,0x1004,0x1004,0x1004
tbString(VIEW_LARGEICONS)="大きいアイコン","小さいアイコン","一覧表示","詳細表示","名前順に整列","サイズ順に整列","日付順に整列","種類順に整列","上のフォルダへ","ネットワークドライブへ接続","ネットワークドライブから切断","新しいフォルダ"
StyleState(VIEW_LARGEICONS)= 0x9804|$4000, 0x9804|$4000, 0x9804, 0x9804|$4000, 0x1004 ,0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x5004
tbString(HIST_BACK) ="前へ","次へ","お気に入り","お気に入りに追加","ツリー表示"
StyleState(HIST_BACK)=0x5004,0x1004, 0x1004, 0x1004, 0x1004
tbString(MY_VERTICAL) ="縦横切替"
StyleState(MY_VERTICAL)=0x1204
//使用するビットマップインデックスをリストにして登録用ボタンデータリストを作る(ボタンデータID0用)IDは順序不同で連番である必要も無いが同じIDは不可でID0はセパレータに使用
dim bmilist,1
bmilist=STD_CUT,STD_COPY,STD_PASTE,STD_UNDO,STD_REDOW,STD_DELETE,STD_FILENEW,STD_FILEOPEN,STD_FILESAVE,STD_PRINTPRE,STD_PROPERTIES,STD_HELP,STD_FIND,STD_REPLACE,STD_PRINT,VIEW_PARENTFOLDER,VIEW_LIST,HIST_BACK,HIST_FORWARD
nbtotal=0
repeat length(bmilist) //コマンドIDはビットマップインデックス+1で設定
bmi=bmilist(cnt)
tbbutton(nbtotal*5) = bmi, bmi+1, (StyleState(bmi) ), 0, varptr(tbString(bmi)) //直接文字列ポインタを指定してるので元の変数が書き換わったり
nbtotal++
loop
tbbutton(nbtotal*5) = 8, 0, 0x100, 0, 0 ;「セパレータ」ボタン コマンドIDは0 (8はセパレータのデフォルト幅)
nbtotal++
NumButtonsList=length(bmilist)+1 //登録するTBBUTTON構造体の数(+1はセパレータ分)
//二つ目のボタンデータリスト作成(ボタンデータID1用)
dim bmilist,1
bmilist=VIEW_LARGEICONS,VIEW_SMALLICONS,VIEW_DETAILS,VIEW_SORTNAME,VIEW_SORTSIZE,VIEW_SORTDATE,VIEW_SORTTYPE,MY_VERTICAL
repeat length(bmilist) //コマンドIDはビットマップインデックス+100で設定
bmi=bmilist(cnt)
tbbutton(nbtotal*5) = bmi, bmi+1, StyleState(bmi), 0, varptr(tbString(bmi)) //直接文字列ポインタを指定してるので元の変数が書き換わったり
nbtotal++
loop
tbbutton(nbtotal*5) = 8, 0, 0x100, 0, 0 ;「セパレータ」ボタン コマンドIDは0 (8はセパレータのデフォルト幅)
nbtotal++
NumButtonsList(1)=length(bmilist)+1 //登録するTBBUTTON構造体の数
gsel 0
min_winid=ginfo_sel
min_hndw=hwnd
//ツールバー作成サブルーチン>*MakeToolBar
//サブルーチン内で使用されるデータをセット (↓の10と11はウィンドウバッファIDで1は画像数)
Small_tbadd=-1,0, -1,4, -1,8, 10,1//TBADDBITMAP小さい画像用(IDB_STD_SMALL_COLOR、IDB_HIST_SMALL_COLOR、IDB_HIST_SMALL_COLOR, 自前画像小,1)
Large_tbadd=-1,1, -1,5, -1,9, 11,1//TBADDBITMAP大きい画像用(IDB_STD_LARGE_COLOR、IDB_HIST_LARGE_COLOR、IDB_HIST_LARGE_COLOR、自前画像大,1)
IDB_cnt=4 //一回のSetTBButtonDataに使用するTB_ADDBITMAPの回数(小さい方だけ)
IDB_Large=1 //大きい画像を使用するか(0なら使用しない)
//WS_CHILD WS_VISIBLE TBSTYLE_CUSTOMERASE TBSTYLE_FLAT TBSTYLE_TOOLTIPS CCS_ADJUSTABLE CCS_TOP
tbstyle=$40000000 | $10000000 | 0x2000 | 0x0800 | 0x0100 | 0x0020 | 0x0001
toolbarindex=0
tbbdid=0 //ボタンデータID
tbindex=0 //ボタンデータインデックス(複数のツールバーに使うボタンデータを纏めてtbbuttonに入れてる時用)
NumButtons=NumButtonsList(toolbarindex) //登録するボタンデータの数
//配置順リスト(ビットマップインデックス+1をコマンドIDしてリスト化)
dim tblist,1
tblist=HIST_BACK+1,HIST_FORWARD+1,VIEW_PARENTFOLDER+1 ,0, STD_FILENEW+1,STD_FILEOPEN+1,STD_FILESAVE+1,0,STD_CUT+1,STD_COPY+1,STD_PASTE+1,0,STD_FIND+1,VIEW_LIST+1
tbmax=length(tblist)
//tbbuttonにボタンデータを入れてジャンプ
gosub *MakeToolBar //ツールバーIDがidtools(toolbarindex)、ハンドルがhTools(toolbarindex)、コントロールIDがControlID(toolbarindex)に入る
toolbarmax++ //作ったツールバーの数
//二つ目のツールバー作成(Small_tbadd、Large_tbadd、IDB_cnt、IDB_Largeは一つ目のデータを流用)
//WS_CHILD WS_VISIBLE TBSTYLE_CUSTOMERASE TBSTYLE_FLAT TBSTYLE_TOOLTIPS CCS_ADJUSTABLE CCS_BOTTOM
tbstyle=$40000000 | $10000000 | 0x2000 | 0x0800 | 0x0100 | 0x0020 | 0x0003
toolbarindex=1
//toolbarindex=toolbarmax
tbbdid=1 //ボタンデータID
tbindex=NumButtonsList(0) //ボタンデータインデックス(複数のツールバーに使うボタンデータを纏めてtbbuttonに入れてる時用)
NumButtons=NumButtonsList(1) //登録するボタンデータの数
//配置順リスト(ビットマップインデックス+1をコマンドIDしてリスト化)
dim tblist,1
tblist=MY_VERTICAL+1 ,0, VIEW_LARGEICONS+1 ,0, VIEW_SORTNAME+1,VIEW_SORTSIZE+1,VIEW_SORTDATE+1,VIEW_SORTTYPE+1
tbmax=length(tblist)
//tbbuttonにボタンデータを入れてジャンプ
gosub *MakeToolBar //ツールバーIDがidtools(toolbarindex)、ハンドルがhTools(toolbarindex)、コントロールIDがControlID(toolbarindex)に入る
toolbarmax++ //作ったツールバーの数
ToolBarLoad "ToolBar.dat",hTools //ツールバー復元(一度初期状態でツールバーを設置してから実行してください)
//ツールバーの変更でこの上にインサートできないように設定(setNoInsertButton、setNoDeleteButtonはセーブされません)
setNoInsertButton hTools,HIST_BACK+1 ,1
setNoInsertButton hTools,HIST_FORWARD+1 ,1
setNoInsertButton hTools,VIEW_PARENTFOLDER+1 ,1
//ツールバーの変更で削除出来ないように設定(これを設定されてるボタンは未使用でも左側のリストボックスに表示されない)
setNoDeleteButton hTools,HIST_BACK+1 ,1
setNoDeleteButton hTools,HIST_FORWARD+1 ,1
setNoDeleteButton hTools,VIEW_PARENTFOLDER+1 ,1
setNoDeleteButton hTools(1),MY_VERTICAL+1 ,1
setNoDeleteButton hTools(1),VIEW_LARGEICONS+1 ,1
setNoDeleteButton hTools(1),VIEW_SMALLICONS+1 ,1
setNoDeleteButton hTools(1), VIEW_DETAILS+1 ,1
; 右クリックメニュー作成
CreatePopupMenu
hmenu(0)= stat //コマンドID0はセパーレータなのでツールバー右クリックメニューハンドルインデックスに利用
AppendMenu hmenu , 0, 101, "ユーザー設定"
; ドロップダウンボタン用のメニュー作成
CreatePopupMenu
hmenu( STD_FILENEW+1) = stat //二つのツールバーでコマンドIDが被らないようにしてるのでIDをそのまま使用
AppendMenu hmenu( STD_FILENEW+1) , 0, 201, "新規1(未)"
AppendMenu hmenu( STD_FILENEW+1) , 0, 202, "新規2(未)"
AppendMenu hmenu( STD_FILENEW+1) , $800, 0, "" ; 区切り線
AppendMenu hmenu( STD_FILENEW+1) , 0, 203, "ファイルから...(未)"
CreatePopupMenu
hmenu(VIEW_LIST+1) = stat
AppendMenu hmenu(VIEW_LIST+1), 0, 301, "縮小版(未)"
AppendMenu hmenu(VIEW_LIST+1), 0, 302, "並べて表示(未)"
//ドロップダウンメニュー選択でツールバーボタン入れ替え用(ボタンに機能は無い)
CreatePopupMenu
hmenu(VIEW_LARGEICONS+1) = stat
AppendMenu hmenu(VIEW_LARGEICONS+1), 0, 402, "小さいアイコン"
AppendMenu hmenu(VIEW_LARGEICONS+1), 0, 403, "詳細表示"
CreatePopupMenu
hmenu(VIEW_SMALLICONS+1) = stat
AppendMenu hmenu(VIEW_SMALLICONS+1), 0, 401, "大きいアイコン"
AppendMenu hmenu(VIEW_SMALLICONS+1), 0, 403, "詳細表示"
CreatePopupMenu
hmenu(VIEW_DETAILS+1) = stat
AppendMenu hmenu(VIEW_DETAILS+1), 0, 401, "大きいアイコン"
AppendMenu hmenu(VIEW_DETAILS+1), 0, 402, "小さいアイコン"
oncmd gosub *OnCommand, WM_COMMAND
oncmd gosub *OnNotify, WM_NOTIFY
stop
*OnCommand
if toolbar_hwnd { //ツールバーの変更ダイアログが開いてる
foreach cmbid
if lparam = objinfo(cmbid(cnt),2) {
if (wparam>>16)=9 {//CBN_SELENDOK
cbi_bak=cbi(cnt)
}else{
if ((wparam>>16)=1) and (cbi_bak ! cbi(cnt)) {//CBN_SELCHANGE
ToolBarReset toolbar_hwnd,1,cbi(0),cbi(1)
}
}
break
}
loop
return
}
repeat toolbarmax
if lparam = hTools(cnt) {
itemId = wParam & $FFFF
title "ToolBra:"+cnt+" コマンドID:"+itemId
if itemId=(MY_VERTICAL+1) {
sendmsg hTools(cnt), 0x0439, 0, 0//TB_GETSTYLE
tbst=stat
sendmsg hTools(cnt),0x0412,itemId,0//TB_GETSTATE
tbst=(tbst|$83)^$83 //縦スタイルと上下にくっくつッスタイル削除
if stat&1 {tbst | $81}else{tbst | 3}
sendmsg hTools(cnt), 0x0438, 0,tbst//TB_SETSTYLE
ToolBarReset hTools(cnt),1 //スタイル変更を反映させるのにリセット
}
break
}
loop
return
*OnNotify
dupptr NMHDR_dup,lParam,44,4
//logmes strf("%d %d %d %d %d %d %d %d %d %d ",NMHDR_dup,NMHDR_dup(1),NMHDR_dup(2),NMHDR_dup(3),NMHDR_dup(4),NMHDR_dup(5),NMHDR_dup(6),NMHDR_dup(7),NMHDR_dup(8),NMHDR_dup(9))
if NMHDR_dup(1)>=TOOLBAR_FIRSTID and NMHDR_dup(1)<=TOOLBAR_LASTID{//idFrom (ToolBarAddButtonsの戻り値と同じならツールバーとして処理、TOOLBAR_FIRSTIDはモジュール内で256に設定してあります。)
///codeの-700〜-728を0〜28にしてgoto
on -(NMHDR_dup(2)+700) goto *_TBN_GETBUTTONINFOA,*_TBN_BEGINDRAG,*_TBN_ENDDRAG,*_TBN_BEGINADJUST,*_TBN_ENDADJUST,*_TBN_RESET,*_TBN_QUERYINSERT,*_TBN_QUERYDELETE,*_TBN_TOOLBARCHANGE,*_TBN_CUSTHELP,*_TBN_DROPDOWN,*_TBN_711 ,*_TBN_GETOBJECT,*_TBN_HOTITEMCHANGE,*_TBN_DRAGOUT,*_TBN_DELETINGBUTTON,*_TBN_GETDISPINFOA,*_TBN_GETDISPINFOW,*_TBN_GETINFOTIPA,*_TBN_GETINFOTIPW,*_TBN_GETBUTTONINFOW,*_TBN_RESTORE,*_TBN_SAVE,*_TBN_INITCUSTOMIZE,*_TBN_WRAPHOTITEM ,*_TBN_DUPACCELERATOR ,*_TBN_WRAPACCELERATOR,*_TBN_DRAGOVER ,*_TBN_MAPACCELERATOR
if NMHDR_dup(2)=-5 {//右クリックメニュー
if NMHDR_dup(3)=-1 {
TrackPopupMenuEx hmenu, $100, ginfo_mx, ginfo_my, NMHDR_dup, 0
if stat=101{
sendmsg NMHDR_dup,TB_CUSTOMIZE,0,0
}
}
}
}
return
*_TBN_GETBUTTONINFOA //-700
ret=retButtonInfo(lParam) //ツールバーの変更ダイアログが開いてる時に必要に応じてダミーボタンデータや左リストボックスにアイテムを追加します
return ret //retButtonInfo(lParam)の戻り値を渡す
*_TBN_BEGINDRAG //(-701)
return
*_TBN_ENDDRAG //(-702)
return
*_TBN_BEGINADJUST //(-703)
return
*_TBN_ENDADJUST //(-704)ツールバーの変更ダイアログが閉じられた
if toolbar_hwnd {//コンボボックス削除
toolbar_hwnd=0
selwinid_bak=ginfo_sel
gsel tb_winid
foreach cmbid
clrobj cmbid(cnt),cmbid(cnt)
loop
gsel selwinid_bak
}
return
*_TBN_RESET //(-705)
//[ToolBarReset ツールバーハンドル,ボタンを最初に戻す,テキスト表示モード維持,画像の大きさ維持]
ToolBarReset NMHDR_dup,0,-1,-1//初期状態に戻す(最初にToolBarAddButtonsで登録したボタン配置)
return
*_TBN_QUERYINSERT //(-706)
//変更ダイアログを開いた時に一度だけ灰色文字の 区切り のインデックスが来るので1を返さないとダイアログは閉じる
return retNoInsertButton(lParam) //ここで0を返したボタンは[追加(A) ->]がグレーアウトする
*_TBN_QUERYDELETE //(-707)
//変更ダイアログを開いた時に一度も1を返さないとダイアログは閉じる
return retNoDeleteButton(lParam) //ここで0を返したボタンは[<- 削除(R)]がグレーアウトする
*_TBN_TOOLBARCHANGE //(-708)
DelDummyButtton //ダミーボタン削除
return
*_TBN_CUSTHELP //(-709)
return
*_TBN_DROPDOWN //(-710)
gosub *OnToolDropDown
return
*_TBN_711 //(-711)
return
*_TBN_GETOBJECT //(-712)
return
*_TBN_HOTITEMCHANGE //(-713)
return
*_TBN_DRAGOUT //(-714)
return
*_TBN_DELETINGBUTTON //(-715)
return
*_TBN_GETDISPINFOA //(-716)
return
*_TBN_GETDISPINFOW //(-717)
return
*_TBN_GETINFOTIPA //(-718)
return
*_TBN_GETINFOTIPW //(-719)
return
*_TBN_GETBUTTONINFOW //(-720)
return
*_TBN_RESTORE //(-721)
return
*_TBN_SAVE //(-722)
return
*_TBN_INITCUSTOMIZE //(-723)
//[getCustomizeListbox lParam,ツールバーの変更ダイアログのハンドル, 左のリストボックスのハンドル, 右のリストボックスのハンドル, 発見したリストボックスの数]
//ListBoxcntが2じゃ無い場合何かしらの不具合
getCustomizeListbox lParam,customize_hwnd, LeftListbox_hwnd, RightListbox_hwnd, ListBoxcnt //各種ハンドルとリストボックスの数を取得
if stat < 0 {
dialog "Listboxが見つかりませんでした。"
}else{
if stat = 0 {//リストボックスが二つとも見つかった(1だったら前回見つけてから閉じられていない)
logmes refstr //(デバッグログ)ツールバーの変更ダイアログ上のオブジェクトが文字列で返る「クラスネーム,ハンドル,表示テキスト」
gosub *ModeCombox //おまけで変更ダイアログにコンボボックス追加
}
}
return
*_TBN_WRAPHOTITEM //(-724)
return
*_TBN_DUPACCELERATOR //(-725)
return
*_TBN_WRAPACCELERATOR //(-726)
return
*_TBN_DRAGOVER //(-727)
return
*_TBN_MAPACCELERATOR //(-728)
return
*ModeCombox
toolbar_hwnd=NMHDR_dup //設定用コンボボックスに関連付けるツールバーハンドル
dim Rect,4
GetWindowRect customize_hwnd,Rect //ツールバーの変更ダイアログのサイズ取得
SetWindowPos customize_hwnd,0,Rect,Rect(1),(Rect(2)-Rect),(Rect(3)-Rect(1))+34,0x0004|0x0100//ツールバーの変更ダイアログのサイズ変更
tb_winid=ginfo_sel
pos (Rect(2)-Rect)/2-240/2,(Rect(3)-Rect(1))-34
font "MS ゴシック",12,16
objmode 2
objsize 240,18,22
cbi=getTBTextON(toolbar_hwnd),getTBSmallLarge(toolbar_hwnd)
cbstr="テキストを下に表示する\nテキストを右に表示する\nいくつかのテキストを右側に表示する\nテキストを表示しない","小さい画像\n大さい画像"
repeat 2
combox cbi(cnt),100,cbstr(cnt)
cmbid(cnt)=stat
cmbhwnd(cnt)=objinfo(stat,2)
SetParent cmbhwnd(cnt),customize_hwnd //ツールバーの変更ダイアログをcomboxの親に設定
loop
return
*OnToolDropDown
htb=NMHDR_dup //TrackPopupMenuExで書き変わってしまうので
itemId = NMHDR_dup(3)
dim rc, 4
sendmsg htb, TB_GETRECT, itemId, varptr(rc)
pt = rc(0), rc(3)
ClientToScreen htb, varptr(pt)
TrackPopupMenuEx hmenu(itemId), $100, pt(0), pt(1), htb, 0
if stat>400 {//ツールバーボタン差し替え処理
mid=stat
sendmsg htb,0x0419,itemId,0 //TB_COMMANDTOINDEX
index=stat
if mid=401 {
sendmsg htb,0x0416,index,0 //TB_DELETEBUTTON
ToolBarInsertButton htb,index,VIEW_LARGEICONS+1
}
if mid=402 {
sendmsg htb,0x0416,index,0 //TB_DELETEBUTTON
ToolBarInsertButton htb,index,VIEW_SMALLICONS+1
}
if mid=403 {
sendmsg htb,0x0416,index,0 //TB_DELETEBUTTON
ToolBarInsertButton htb,index,VIEW_DETAILS+1
}
}
return
//ツールバーIDがidtools、ハンドルがhTools、コントロールIDがControlIDに入る
*MakeToolBar
winobj "ToolbarWindow32","",0,tbstyle,0,0
hTool=objinfo_hwnd(stat)
hTools(toolbarindex)=hTool
sendmsg hTool, TB_BUTTONSTRUCTSIZE, 20, 0
sendmsg hTool, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS |TBSTYLE_EX_MIXEDBUTTONS
repeat IDB_cnt
//[ ToolBarAddPic ツールバーハンドル, -1, システム定義ビットマップ値 ](システム定義のボタン)
//[ ToolBarAddPic ツールバーハンドル, bufferID, 画像数 ](自前のボタン)
ToolBarAddPic hTool,Small_tbadd(cnt*2),Small_tbadd(cnt*2+1)
loop
LargeIndex=0
repeat IDB_cnt*IDB_Large
ToolBarAddPic hTool,Large_tbadd(cnt*2),Large_tbadd(cnt*2+1),24
if cnt=0 {LargeIndex=stat}
loop
SetTBButtonData tbbdid, NumButtons,tbbutton(tbindex*5),0,LargeIndex,16,24
//ToolBarAddButtons ツールバーハンドル,ボタンデータID,設置するボタンの数,設置するボタンのIDリスト,ボタンにテキストを表示するか(0なら表示)
ToolBarAddButtons hTool,tbbdid,tbmax,tblist,2,0
ControlID(toolbarindex)=stat
return
*OnClose
ToolBarSave "ToolBar.dat",toolbarmax,hTools //現在のツールバーを全て保存
foreach hmenu
if hmenu(cnt) {DestroyMenu hmenu(cnt)}
loop
end
こんな使い方も出来ると言う事で
前へ、次へ、上のフォルダへは変更ダイアログ上で削除と他のを挿入も出来ないように設定
大きいアイコン、小さいアイコン、詳細表示、縦横切替は削除出来ないように設定
削除できないように設定したのは未使用でも変更ダイアログの左側に表示されない
| |
|
2015/12/30(Wed) 15:35:34|NO.73863
書き忘れ
ToolBarAddPicで画像ファイルやウィンドウバッファから画像を追加したときの透過色の扱い
pngファイル以外は左上0,0の座標の色を透過色としてボタンの表面色で塗りつぶします。
pngファイルはボタンの表面色の上にアルファ値有効で読み込まれます。
8ビットカラー画像ファイル等は読み込み時に24ビットのビットマップになります。
ウィンドウバッファIDを指定する場合は必ずフルカラーのバッファにしてください。
(gmode4が使えないので)
|
|