〜 オブジェクト 〜
入力内容を隠すパスワードボックスを配置

入力内容が「●●●」や「***」と表示されるパスワードボックスを設置するには、
HSP2はobjsend命令、HSP3はsendmsg命令でボックスにメッセージを送信しましょう。
送信メッセージは「EM_SETPASSWORDCHAR(=0x00CC)」で、次のように指定してください。

HSP2「objsend オブジェクトID, 0x00CC, 使用キャラクタコード, 不使用(=0), 0」 HSP3「sendmsg オブジェクトハンドル, 0x00CC, 使用キャラクタコード, 不使用(=0)

使用キャラクタコードは1〜255のASCIIコードのことで、0を指定すると通常ボックスに戻します。 尚、メッセージを送信してもオブジェクトを更新、再描画、選択しなければ表示が変わりません。 対象ボックスにobjprm命令またはobjsel命令を実行してあげましょう。 ちなみに、使用キャラクタコードを確認する「EM_GETPASSWORDCHAR(=0x00D2)」というものがあり、

HSP2「objsend オブジェクトID, 0x00D2, 不使用(=0), 不使用(=0), 0」 HSP3「sendmsg オブジェクトハンドル, 0x00D2, 不使用(=0), 不使用(=0)

で、現在の設定キャラクタをstatに返すことができます。 もし、パスワードボックスではないなら0が返りますので、 パスワード状態か否かのチェックにも使用できることでしょう。

setpasschar オブジェクトID, 状態
オブジェクトIDパスワードキャラクタをセットまたはクリアするオブジェクトIDを指定する。
状態パスワード状態(0:開錠 1:施錠)を指定する。

getpasschar オブジェクト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
25
26
#module
#deffunc setpasschar int, int
	mref id, 0 : mref lock, 1
	objsend id, 0x00CC, lock * '*', nonuse // パスワードボックス
	return

#deffunc getpasschar int
	mref id, 0
	mref stt, 64
	objsend id, 0x00D2, 0, nonuse // 状態を取得
	return
#global

	sdim s, 32
	sdim msg, 10, 2
	msg = "施錠", "開錠"
	state = 0
	pos 10, 10 : input s, 100, 20, 16
	pos 10, 40 : button "", *change

*change
	state = 1 - state
	setpasschar 0, state
	objprm 1, msg.state
	objsel 0 // パスワードキャラクタのセット・クリア
	stop

setpasschar オブジェクトID, 状態
オブジェクトIDパスワードキャラクタをセットまたはクリアするオブジェクトIDを指定する。
状態パスワード状態(0:開錠 1:施錠)を指定する。

受取先 = getpasschar(オブジェクト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 setpasschar int id, int lock
	sendmsg objinfo(id, 2), 0x00CC, lock * '*', 0 // パスワードボックス
	return

#defcfunc getpasschar int id
	sendmsg objinfo(id, 2), 0x00D2, 0, 0 // 状態を取得
	return stat
#global

	sdim s, 32
	msg = "施錠", "開錠"
	state = 0
	pos 10, 10 : input s, 100, 20, 16
	pos 10, 40 : button gosub "", *change
	gosub *change
	stop

*change
	state = 1 - state
	setpasschar 0, state
	objprm 1, msg.state
	objsel 0 // パスワードキャラクタのセット・クリア
	return