|
|
|
2013/10/17(Thu) 12:57:43|NO.57647
実験用のプログラミングでチェックボックスを使用し、そのログをデータとしてとっています。
4つのチェックボックスのうち、一つしか押せないように設定することはできたのですが、ログを見てみると
例えばAを押してからBを押しなおした場合(画面上ではBしか選択されていない場合)のログの結果が
AとB両方押したように表記されてしまいます。
どのようになおせば良いでしょうか?
よろしくお願い致します!
;チェックボックスが表示されるページ
*start
cls
picload"select.jpg"
;4つの選択肢の設定
p1=0
p2=0
p3=0
p4=0
;ボタンの表示
pos 450,230
chkbox"A",p1
sendmsg objinfo(stat,2),$F4,$9
pos 650,230
chkbox"B",p2
sendmsg objinfo(stat,2),$F4,$9
pos 850,230
chkbox"C",p3
sendmsg objinfo(stat,2),$F4,$9
pos 1060,230
chkbox"D",p4
sendmsg objinfo(stat,2),$F4,$9
;所持金の表示
pos 520,575
font"MSPゴシック",45,0
mes pocketmoney
;残りの賭け回数の表示
pos 500,655
mes game
pos 1000,642
button"実行",*gonext
;ボタン押し忘れ警告文字のサイズ
font"MSPゴシック",20,1
stop
;チェックボックスのデータをデータとして出力するページ
(出力結果は押されたボタンが1、押されなかったボタンが0として0001のように提示されます。)
*gowarning
;警告提示時間計測開始
await
timeA=timegettime()
cls
;【警告条件を出力】
;選択した掛けを出力
p1=str(p1)
noteadd p1
p2=str(p2)
noteadd p2
p3=str(p3)
noteadd p3
p4=str(p4)
noteadd p4
picload"warning1_1.jpg"
pos 750,425
button"戻る",*start2
pos 750,468
button"実行",*winpage3
stop
| |
|
2013/10/17(Thu) 13:47:56|NO.57648
表示上では、ちゃんとどれか一つで、データ上では、ちゃんと一つになっていないって事は
たぶん、表示上だけを書き換えたはいいけど、p1 などの内部をちゃんと書き換えられてないってことかな。
下記サンプル
#const WM_COMMAND 0x0111
#const BM_SETCHECK 0x00F1
#const BST_UNCHECKED 0x0000
#const BST_CHECKED 0x0001
title "チェックボックステスト"
oncmd gosub *wm_cmm,WM_COMMAND
//テスト用表示状態データ
a1 = 0
a2 = 1
a3 = 1
a4 = 1
//ここまで
pos 0,0 : chkbox "A1",a1 : a1_objID = stat : a1_hwnd = objinfo(a1_objID,2)
pos 0,30 : chkbox "A2",a2 : a2_objID = stat : a2_hwnd = objinfo(a2_objID,2)
pos 0,60 : chkbox "A3",a3 : a3_objID = stat : a3_hwnd = objinfo(a3_objID,2)
pos 0,90 : chkbox "A4",a4 : a4_objID = stat : a4_hwnd = objinfo(a4_objID,2)
mes "A1 WindowHandle : "+a1_hwnd
mes "A2 WindowHandle : "+a2_hwnd
mes "A3 WindowHandle : "+a3_hwnd
mes "A4 WindowHandle : "+a4_hwnd
button gosub "状況確認",*ViewDialog
stop
*ViewDialog
Output_String = strf("%d%d%d%d",a1,a2,a3,a4)
dialog "A1 ="+a1+"\nA2 ="+a2+"\nA3 ="+a3+"\nA4 ="+a4+"\n\n出力データ\n"+Output_String,0,"ボタンの状況"
return
*wm_cmm
//A1 チェック制御
if (( a1_hwnd == lparam )&&( iparam == 273 )){
if (a2 == 1) : a2 = 0 : sendmsg a2_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a3 == 1) : a3 = 0 : sendmsg a3_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a4 == 1) : a4 = 0 : sendmsg a4_hwnd,BM_SETCHECK,BST_UNCHECKED,0
}
//A2 チェック制御
if (( a2_hwnd == lparam )&&( iparam == 273 )){
if (a1 == 1) : a1 = 0 : sendmsg a1_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a3 == 1) : a3 = 0 : sendmsg a3_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a4 == 1) : a4 = 0 : sendmsg a4_hwnd,BM_SETCHECK,BST_UNCHECKED,0
}
//A3 チェック制御
if (( a3_hwnd == lparam )&&( iparam == 273 )){
if (a1 == 1) : a1 = 0 : sendmsg a1_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a2 == 1) : a2 = 0 : sendmsg a2_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a4 == 1) : a4 = 0 : sendmsg a4_hwnd,BM_SETCHECK,BST_UNCHECKED,0
}
//A4 チェック制御
if (( a4_hwnd == lparam )&&( iparam == 273 )){
if (a1 == 1) : a1 = 0 : sendmsg a1_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a2 == 1) : a2 = 0 : sendmsg a2_hwnd,BM_SETCHECK,BST_UNCHECKED,0
if (a3 == 1) : a3 = 0 : sendmsg a3_hwnd,BM_SETCHECK,BST_UNCHECKED,0
}
return
チェックボックス入力の判定側で、ちゃんと p1 (上記スクリプト上では、a1) などに 0 未チェックを設定
してあげるといい。
| |
|
2013/10/17(Thu) 15:28:17|NO.57650
/*ご参考*/
ss = ""
pp = 1,0,0,0
repeat 4
pos 100+(cnt*100),230
poke ss,0,65+cnt
chkbox ss,pp(cnt)
sendmsg objinfo(stat,2),$F4,$9
loop
pos 0,230
button gosub "",*label
stop
*label
repeat 4 :sendmsg objinfo(cnt,2),$F0 :pp(cnt) = stat :loop
title strf("%d %d %d %d",pp(0),pp(1),pp(2),pp(3))
return
|
|