〜 オブジェクト 〜
入力文字数を制限

input命令やmesbox命令で配置したエディットボックスには入力できる文字数を制限できます。
配置後に上限を変更したい時は一旦オブジェクトを削除して
同じ位置・同じ大きさのオブジェクトを再度配置するのもアリですが、
オブジェクトにメッセージを送って配置済のエディットコントロールの上限を再設定するやり方もあります。
HSP2はobjsend命令、HSP3からはsendmsg命令でオブジェクトにメッセージを送信できますので、
入力文字数の上限を設定したい場合はEM_LIMITTEXT(=0x00C5)を次のように指定します。

HSP2「objsend オブジェクトID, 0x00C5, 上限サイズ, 不使用(=0), 0」 HSP3「sendmsg オブジェクトハンドル, 0x00C5, 上限サイズ, 不使用(=0)

尚、上限数を増やしたからといって変数サイズの上限も増えるわけではありません。 エディットボックスに入力が出来るようになるだけなので、 内容全てを扱えるようにするには文字列終端記号1バイト分を含んだ「最大数+1」以上を用意しましょう。 テキスト編集と選択ができるコチラで紹介したエディットコンボの場合の字数制限は、 EM_LIMITTEXT(=0x00C5)ではなく、CB_LIMITTEXT(=0x0141)で行います。 詳しくは紹介ページを参照してください。

seteditlimit オブジェクトID, サイズ
オブジェクトID最大数を変更するエディットボックス系のオブジェクトIDを指定する。
サイズ変更後のサイズを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#module
#deffunc seteditlimit int, int
	mref id, 0 : mref size, 1
	objsend id, 0x00C5, size, nouse
	return
#global

	max = 255
	size = 10
	sdim buf, max + 1
	pos  10, 10 : mes "サイズ"
	pos  70, 10 : input size, 40, 20
	pos 120, 10 : button "変更", *change
	pos  10, 40 : mesbox buf, winx - 20, winy - 50, 1, size
	stop

*change
	if size < 1 | size > max {
		dialog "サイズは1〜" + max + "内でなければなりません"
	} else {
		seteditlimit 2, size
		dialog "サイズ変更しました\n" + size + "文字まで入力できます"
	}
	stop

seteditlimit オブジェクトID, サイズ
オブジェクトID最大数を変更するエディットボックス系のオブジェクトIDを指定する。
サイズ変更後のサイズを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#module
#deffunc seteditlimit int id, int size
	sendmsg objinfo(id, 2), 0x00C5, size
	return
#global

	max = 255
	size = 10
	sdim buf, max + 1
	pos  10, 10 : mes "サイズ"
	pos  70, 10 : input size, 40, 20
	pos 120, 10 : button gosub "変更", *change
	pos  10, 40 : mesbox buf, ginfo_winx - 20, ginfo_winy - 50, , size
	stop

*change
	if size < 1 | size > max {
		dialog "サイズは1〜" + max + "内でなければなりません"
	} else {
		seteditlimit 2, size
		dialog "サイズ変更しました\n" + size + "文字まで入力できます"
	}
	return