〜 オブジェクト 〜
アップダウンコントロールを配置1

mesbox命令で配置する複数行エディットコントロールを1行分の高さに高さに縮めることで
アップダウンコントロールのような形状になるというヒントを元に作成したTipsです。

エディットボックスを1行表示にすることで、
先頭の表示行番号を取得する「EM_GETFIRSTVISIBLELINE(=0x00CE)」で現在値を取得することができますし、
キャレット位置の変更「EM_SETSEL(=0x00B1)」、キャレット位置を表示「EM_SCROLLCARET(=0x00B7)」、
これらを組み合わせることで任意の値を表示させるよう変更することも出来ます。

EM_GETFIRSTVISIBLELINE HSP2「objsend オブジェクトID, 0x00CE, 不使用(=0), 不使用変数(=0), 0」 HSP3「sendmsg オブジェクトハンドル, 0x00CE, 不使用(=0), 不使用(=0)EM_SETSEL HSP2「objsend オブジェクトID, 0x00B1, 選択開始位置, 選択終了位置(変数), 1」 HSP3「sendmsg オブジェクトハンドル, 0x00B1, 選択開始位置, 選択終了位置EM_SCROLLCARET HSP2「objsend オブジェクトID, 0x00B7, 不使用(=0), 不使用変数(=0), 0」 HSP3「sendmsg オブジェクトハンドル, 0x00B7, 不使用(=0), 不使用(=0)

ただ、あくまで簡易版なので、100と10が入っている時に10を検索すると正規の10ではなく、 100のテキスト内の10部分がヒットされる問題が発生してしまうので、 下記サンプルのように桁数を揃えるためのスペースを入れる等の工夫が必要になり少々面倒です。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	sdim buf, 100
	notesel buf
	buf = "1000\n 500\n 300\n 200\n 100\n  50\n  40\n  30\n  20\n  15\n  10\n   5\n   4\n   3\n   2\n   1"
	pos 10, 10 : mesbox buf, 60, 25, 0
	pos 80, 10 : button "現在値", *getvalue
	pos 10, 50 : combox index, , buf
	pos 80, 50 : button "選択", *setvalue
	stop

*getvalue
	objsend 0, 0x00CE, , nonuse // 表示行を取得
	noteget tmp, stat
	dialog"現在 : " + tmp
	stop

*setvalue
	objsel 0
	noteget tmp, index
	instr i, buf, tmp
	if i ! -1 {
		objsend 0, 0x00B1, i, i, 1 // 検索先頭位置に移動
		objsend 0, 0x00B7, , nonuse // 選択位置を表示
	}
	stop
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	sdim buf, 100
	notesel buf
	buf = "1000\n 500\n 300\n 200\n 100\n  50\n  40\n  30\n  20\n  15\n  10\n   5\n   4\n   3\n   2\n   1"
	pos 10, 10 : mesbox buf, 60, 20, 0
	pos 80, 10 : button gosub "現在値", *getvalue
	pos 10, 50 : combox index, , buf
	pos 80, 50 : button gosub "選択", *setvalue
	stop

*getvalue
	sendmsg objinfo(0, 2), 0x00CE // 表示行を取得
	noteget tmp, stat
	dialog"現在 : " + tmp
	return

*setvalue
	objsel 0
	noteget tmp, index
	tmp = instr(buf, , tmp)
	if tmp ! -1 {
		sendmsg objinfo(0, 2), 0x00B1, tmp, tmp // 検索先頭位置を選択
		sendmsg objinfo(0, 2), 0x00B7           // 選択位置を表示
	}
	return