〜 オブジェクト 〜
アップダウンコントロールを配置2 (要USER32.DLL, COMCTL32.DLL)

擬似ではなくウィンドウズが提供する正規のアップダウンコントロールを配置するサンプル。
コモンコントロールを提供するComctl32.DLLのCreateUpDownControlを使用して配置しています。
CreateUpDownControlの第1引数から順に「スタイル」「X座標」「Y座標」「横幅」「高さ」「親ハンドル」
「識別子」「インスタンスハンドル」「バディハンドル」「上限値」「下限値」「初期値」と多いですが、
1つずつ見ていきましょう。
スタイルは、見た目と動作に影響があるもので、最低でも子ウィンドウを示すWS_CHILD(=0x40000000)、
可視状態を示すWS_VISIBLE(=0x10000000)は必ずセットしなければなりませんが、
このほかに以下のオプションが追加で設定できます。
UDS_WRAP0x0001上限、下限を超えると反対側に折り返す
UDS_SETBUDDYINT0x0002値変更時にバディウィンドウのテキストも変更する
UDS_ALIGNRIGHT0x0004コントロールをバディウィンドウの右に配置する
UDS_ALIGNLEFT0x0008コントロールをバディウィンドウの左に配置する
UDS_AUTOBUDDY0x0010Zオーダーが1つ前のウィンドウをバディウィンドウとする
UDS_ARROWKEYS0x0020上、下矢印キーで値を増減させる
UDS_HORZ0x0040コントロールの矢印が上下ではなく左右
UDS_NOTHOUSANDS0x00803桁毎の区切りコンマを挿入しない
UDS_HOTTRACK0x0100ホットトラック対応
X・Y座標、横幅・高さは、アップダウンコントロールの位置とサイズ。 親ハンドルは、アップダウンコントロールを配置するウィンドウハンドル。 識別子は、アップダウンコントロールのID。 インスタンスハンドルは、アップダウンコントロールを配置するインスタンスハンドル。 バディハンドルは、アップダウンコントロールの増減によって連動させるオブジェクトハンドル。 コレを指定すると、X・Y座標、横幅・高さは無視されます。 上限・下限値はアップダウンコントロールで切り替えられる値の限界値。 初期値はアップダウンコントロールに設定するデフォルト値。 以上を設定し、アップダウンコントロールを配置するとアップダウンコントロールのハンドルが返ります。 普段良く見るのはアップダウンコントロールと値の表示または直接変更する入力ボックスのセットで、 以下のサンプルではモジュール内部で処理しているので入力ボックスと同時に配置されていますが、 CreateUpDownControl関数は、アップダウンコントロールしか配置しませんので注意してください。

updownbox 連動変数, 最小値, 最大値, 初期値, オプション
連動変数コントロールを上下させた時に連動させる変数を指定する。
尚、配置するとstatにハンドルが返るので削除するなら退避させておくこと。
最小値コントロールで設定できる最小値を指定する。
最大値コントロールで設定できる最大値を指定する。
初期値変更後の高さを指定する。尚、フラグに1を指定していると高さは無視される。
オプション以下の指定したいオプション値の合計を指定する。
+1入力ボックスの直接編集を不可にする(背景が灰色表示となる)
+2カーソル上キーで増加、下キーで減少出来るようにする
+4コントロールを入力ボックスの左側に配置する
+8矢印を上下ではなく左右にする(配置歯所は一緒)
+163桁区切りのコンマを表示しない
+32値が最大値を超えると最小値、最小値を超えると最大値にする

delxobj ハンドル
ハンドル削除する拡張オブジェクトハンドルを指定する。

 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カーソル上キーで増加、下キーで減少出来るようにする
+4コントロールを入力ボックスの左側に配置する
+8矢印を上下ではなく左右にする(配置歯所は一緒)
+163桁区切りのコンマを表示しない
+32値が最大値を超えると最小値、最小値を超えると最大値にする

 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