| ||||||||||||||||||||||||||||||||||||||||
|
アップダウンコントロールを配置2 (要USER32.DLL, COMCTL32.DLL)
| ||||||||||||||||||||||||||||||||||||||||
擬似ではなくウィンドウズが提供する正規のアップダウンコントロールを配置するサンプル。 コモンコントロールを提供するComctl32.DLLのCreateUpDownControlを使用して配置しています。 CreateUpDownControlの第1引数から順に「スタイル」「X座標」「Y座標」「横幅」「高さ」「親ハンドル」 「識別子」「インスタンスハンドル」「バディハンドル」「上限値」「下限値」「初期値」と多いですが、 1つずつ見ていきましょう。 スタイルは、見た目と動作に影響があるもので、最低でも子ウィンドウを示すWS_CHILD(=0x40000000)、 可視状態を示すWS_VISIBLE(=0x10000000)は必ずセットしなければなりませんが、 このほかに以下のオプションが追加で設定できます。
| ||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
ll_libload comctl, "comctl32.dll" ll_getproc CreateUpDownControl, "CreateUpDownControl", comctl ll_libload user, "user32.dll" ll_getproc DestroyWindow, "DestroyWindow", user #module #deffunc updownbox val, int, int, int, int mref value, 16 : mref min, 1 : mref max, 2 : mref now, 3 : mref option, 4 mref stt, 64 mref bmscr, 67 flg = 0x0020, 0x0004, 0x0040, 0x0080, 0x0001 input value, bmscr.29, bmscr.30 i = 41 + stat, stat, 2, 0 // bmscr.41:配置オブジェクトハンドル objsend i.1, 0x00CF, option & 1, nonuse repeat 5 if option & i.2 : i.3 += flg.cnt i.2 = i.2 * 2 loop prm = 0x50800006 + i.3, 0, 0, 0, 0, bmscr.13, 0, 0, bmscr.i, max, min, now ll_callfunc prm, 12, CreateUpDownControl@ ll_ret i : stt = i return #deffunc delxobj int mref h, 0 ll_callfunc h, 1, DestroyWindow@ return #global font msgothic, 20 : objmode 2 objsize 100, 35 pos 120, 10 : button "現在値", *getvalue pos 230, 10 : button "削除", *delupdown pos 340, 10 : button "再配置", *setupdown *setupdown if objh : stop font msgothic, 32, 1 pos 10, 10 : updownbox v, 0, 1000, 500, 1 + 2 + 16 : objh = stat objsel 0 stop *delupdown if objh : delxobj objh : clrobj 3 objh = 0 stop *getvalue dialog"現在 : " + v objsel 0 stop |

| updownbox 連動変数, 最小値, 最大値, 初期値, オプション | |||||||||||||
| 連動変数 | コントロールを上下させた時に連動させる変数を指定する。 尚、配置するとstatにハンドルが返るので削除するなら退避させておくこと。 | ||||||||||||
| 最小値 | コントロールで設定できる最小値を指定する。 | ||||||||||||
| 最大値 | コントロールで設定できる最大値を指定する。 | ||||||||||||
| 初期値 | 変更後の高さを指定する。尚、フラグに1を指定していると高さは無視される。 | ||||||||||||
| オプション | 以下の指定したいオプション値の合計を指定する。
| ||||||||||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#uselib "comctl32.dll" #func global CreateUpDownControl "CreateUpDownControl" int, int, int, int, int, int, int, int, int, int, int, int #module #deffunc updownbox var value, int min, int max, int now, int option, local i flg = 0x0020, 0x0004, 0x0040, 0x0080, 0x0001 input value i.1 = objinfo(stat, 2), 2 sendmsg i.1, 0x00CF, option & 1 foreach flg if option & i.2 : i += flg.cnt i.2 *= 2 loop CreateUpDownControl 0x50800006 + i, , , , , hwnd, , , i.1, max, min, now return stat #global font msgothic, 32, 1 : objmode 2 objsize 100, 35 pos 10, 10 : updownbox v, 0, 1000, 500, 1 + 2 + 16 font msgothic, 20 pos 120, 10 : button gosub "現在値", *getvalue stop *getvalue dialog"現在 : " + v objsel 0 return |