HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0506
初心者2つのchkboxの両方にチェックを入れれないようにしたい6未解決


初心者

リンク

2019/5/6(Mon) 16:13:16|NO.87264

質問です
チェックボックスを2つ設置し、1番にチェックが入っている状態で2番にチェックを入れると
1番のチェックが消え、2番にチェックが入っている状態で1番にチェックを入れると
2番が消えるようなことは可能でしょうか?
oncmdとかobjprmとか色々調べたのですが上手く行かず…
よろしくお願い致します



この記事に返信する


ZAP

リンク

2019/5/6(Mon) 17:39:55|NO.87266

「どれか一つしか選べない」という前提で作るのであれば、
チェックボックスではなくてラジオボタンで作るのがよいでしょう。



さくら

リンク

2019/5/6(Mon) 18:46:23|NO.87267

ボタンからスタイル変換して、チェックボックスを作成しています。
CHECKBOXの数は、何個でも増やせますが、オブジェクトIDに注意して下さい。
サンプルでは、IDは、0と1のみ使用しています。(オブジェクトを2つしか配置していないため)


#define BM_SETSTYLE $000000F4 #define BM_SETCHECK $000000F1 #define BS_CHECKBOX $00000002 ;ここの画面の塗りつぶしをコメントアウトにするとボタンの長さが見えます(^^; ; ↓ color 240,240,240 : boxf color 0,0,0 : font "Meiryo UI",10,0 objmode 2 objsize 130,20 pos 10,10:button "1つ目のCHECKBOX",*getchk sendmsg objinfo(0,2),BM_SETSTYLE,BS_CHECKBOX,0 pos 10,31:button "2つ目CHECKBOX",*getchk sendmsg objinfo(1,2),BM_SETSTYLE,BS_CHECKBOX,0 sendmsg objinfo(cid,2),BM_SETCHECK,1,0 stop *chk ;***** 複数のチェックボックスから1つだけをONにする ***** ; ID : 0,1使用 repeat 2 sendmsg objinfo(cnt,2),BM_SETCHECK,0,0 loop sendmsg objinfo(cid,2),BM_SETCHECK,1,0 return *getchk ;***** チェックボックス状態取得 ***** cid = stat : gosub *chk stop



初心者

リンク

2019/5/7(Tue) 12:42:16|NO.87274

ありがとうございます!
1番がチェックが入っている状態で1番をクリックして両方チェックを外せるようにすることは可能しょうか?
両方外す用途があったためラジオボタンだと都合が良くないなと



YOS G-spec

リンク

2019/5/8(Wed) 20:14:54|NO.87283

ちょっとさくらさんの物とは考え方違いますがこんなのどうでしょうか。


chkbox "chkA",a #enum aRef=0 chkbox "chkB",b #enum bRef *eventLoop if 2<=a+b { if a!=_a: objprm aRef,0 if b!=_b: objprm bRef,0 } else:_a=a:_b=b wait 1 goto*eventLoop

chkboxでイベントハンドラがないことが今回の問題点であるわけですから、
値を常に監視してしまえという考え方です。。
ただし、gotoなどで処理位置が外れたっきりループに戻ってこないと
監視は働かなくなりますのでご注意を。



YOS G-spec

リンク

2019/5/8(Wed) 22:55:15|NO.87284

さくらさんのギミックを引用したバージョンでも試しました。
どこか冗長すぎる気がしますがあくまでも実装の一例として参考まで。


#define BM_SETSTYLE $F4 #define BM_SETCHECK $F1 #define BS_CHECKBOX $02 #define newChk(%1) \ sendmsg objinfo(%1,2),BM_SETSTYLE,BS_CHECKBOX,0 #define setChk(%1,%2) \ sendmsg objinfo(%1,2),BM_SETCHECK,%2,0 button gosub "chkA",*onChk #enum aRef=0 newChk aRef button gosub "chkB",*onChk #enum bRef newChk bRef #enum chkCount dim chkList,chkCount stop *onChk id=stat chkList(id)=1!chkList(id) setChk id,chkList(id) chkNo=0 foreach chkList chkNo+=chkList(cnt) if 2<=chkNo { foreach chkList: setChk cnt,0: loop setChk id,1 break } loop return



nori

リンク

2019/5/8(Wed) 23:24:50|NO.87285

チェックが押された時に片方のチェックを無条件で外すだけでいい気がする

#define WM_COMMAND $00000111 #define BM_SETCHECK $000000F1 #define BST_UNCHECKED $00000000 chkbox "A",ChkA hChkA = objinfo(stat, 2) chkbox "B",ChkB hChkB = objinfo(stat, 2) oncmd gosub *command, WM_COMMAND stop *command if lparam = hChkA { sendmsg hChkB , BM_SETCHECK , BST_UNCHECKED } if lparam = hChkB { sendmsg hChkA , BM_SETCHECK , BST_UNCHECKED } return



ONION software Copyright 1997-2023(c) All rights reserved.