〜 オブジェクト 〜
入力内容が変更されたか確認

input命令、mesbox命令で配置したエディットボックスの入力内容が変更されたかを確認するには
変数内容を退避しておいて、その退避した内容と完全一致かを確認する方法でも良いのですが、
エディットボックスオブジェクトにメッセージを送信する方法で簡単に変更状態を確認できます。
HSP2はobjsend命令、HSP3からはsendmsg命令でオブジェクトにメッセージを送信できますので、
対象エディットボックスに「EM_GETMODIFY(=0x00B8)」を下記の方法で指定してみてください。

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

内容に変更を加えた後に変更状態を確認するとstatに1が、変更されてない場合は0が返るわけですが、 保存処理を行った後に変更状態をクリアしなければ、保存後は変更してないのに変更されたと誤認されます。 変更状態を制御するには「EM_SETMODIFY(=0x00B9)」を下記方法で送信してください。

HSP2「objsend オブジェクトID, 0x00B9, 未変更(=0) or 変更済(=1), 不使用(=0), 0」 HSP3「sendmsg オブジェクトハンドル, 0x00B9, 未変更(=0) or 変更済(=1), 不使用(=0)

コレはメモ帳で使用している通常のエディットコントロールの他、 ワードパッドで使用しているリッチエディットコントロールの変更状態もチェックできるようです。 下記サンプルの様に、アプリケーション終了前に変更されていたら注意を促してあげましょう。

geteditmodify オブジェクトID
オブジェクトID変更状態の確認をするオブジェクトIDを指定する。

seteditmodify オブジェクトID, 状態
オブジェクトID状態を変更するオブジェクトIDを指定する。
状態変更状態(0:未変更 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
29
30
31
32
#module
#deffunc geteditmodify int
	mref id, 0
	mref stt, 64
	objsend id, 0x00B8, 0, nonuse // 変更状態を取得
	return stat
#deffunc seteditmodify int, int
	mref id, 0 : mref state, 1
	objsend id, 0x00B9, state, nonuse // 状態を変更
	return
#global

	onexit *exit
	sdim buf, 128
	objsize winx, 25
	button "保存", *save
	mesbox buf, , winy - 25, 5
	stop

*save
	dialog "保存しました…と言ってもココでは変更状態をクリアするだけです。"
	seteditmodify 1, 0 // 未変更状態にする
	stop

*exit
	// 終了前に変更されているかを確認する
	geteditmodify 1
	if stat {
		dialog "終了前に保存しますか?", 2
		if stat = 6 : goto *save
	}
	end

受取先 = geteditmodify(オブジェクトID)
受取先取得した変更状態の受取先を指定する。
オブジェクトID変更状態の確認をするオブジェクトIDを指定する。

seteditmodify オブジェクトID, 状態
オブジェクトID状態を変更するオブジェクトIDを指定する。
状態変更状態(0:未変更 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
#module
#defcfunc geteditmodify int id
	sendmsg objinfo(id, 2), 0x00B8, 0, 0 // 変更状態を取得
	return stat
#deffunc seteditmodify int id, int state
	sendmsg objinfo(id, 2), 0x00B9, state, 0 // 状態を変更
	return
#global

	onexit gosub *exit
	sdim buf, 128
	objsize ginfo_winx, 25
	button gosub "保存", *save
	mesbox buf, , ginfo_winy - 25, 5
	stop

*save
	dialog "保存しました…と言ってもココでは変更状態をクリアするだけです。"
	seteditmodify 1, 0 // 未変更状態にする
	return

*exit
	// 終了前に変更されているかを確認する
	if geteditmodify(1) {
		dialog "終了前に保存しますか?", 2
		if stat = 6 : gosub *save
	}
	end