【HSP】ラジオボタンを簡単に設置できるようにする【モジュール】
【HSP】ラジオボタンを簡単に設置できるようにする【モジュール】
//// ラジオボタンを設置するモジュール
#include "user32.as"
#module "radio_button"
// モジュール初期化
// rb_init
#deffunc rb_init
dim rb_value // 配列増える。各ラジオボタンにあらかじめチエックをつけるか
dim rb_id,1 // 配列増える。ラジオボタンのオブジェクトID
dim rb_many // ラジオボタンの個数
dim rb_many_ex // ラジオボタンの個数 (すべてのグループ)
dim rb_chk // ラジオボタン選択状況
dim rb_flag // 設置可能な状況かどうか
dim rb_group_many // グループの個数
dim rb_group_info,2, // 配列増える。グループごとのラジオボタンの情報 (1つめのrb_id,個数)
return
// ラジオボタンのグループの始まりを指定
// rb_start
#deffunc rb_start
if rb_flag=0 {
rb_many=0
rb_flag=1
}
return
// ラジオボタンのグループの終わりを指定
// rb_end
// stat にグループID (※) が返る
#deffunc rb_end
if rb_flag=1 {
repeat rb_many
if cnt=0 {
SetWindowLong objinfo(rb_id(rb_many_ex-rb_many+cnt),2),-16,$50000009|$20000
}
sendmsg objinfo(rb_id(rb_many_ex-rb_many+cnt),2),$F4,$9
loop
rb_group_info(0,rb_group_many)=rb_many_ex-rb_many
rb_group_info(1,rb_group_many)=rb_many
rb_group_many++
rb_flag=0
}
return rb_group_many-1
// ラジオボタンの設置
// rb_set "strings",p1
// "strings" : 表示するメッセージ
// p1=0~1 : あらかじめチェックするかどうか (1=チェック) (※)
// stat にHSP内でのオブジェクトIDが返る
#deffunc rb_set str _p1,int _p2
if rb_flag=1 {
rb_value(rb_many_ex)=_p2
chkbox _p1,rb_value(rb_many_ex)
rb_id(rb_many_ex)=stat
rb_many++
rb_many_ex++
}
return rb_id(rb_many_ex-1)
// ラジオボタンの選択項目取得
// val = rb_get(p1,p2)
// p1=0~ : グループID (※)
// p2=0~1 : 取得するタイプ (0=グループ (※) 内でのラジオボタンID (※) / 1=HSP内でのオブジェクトID)
#defcfunc rb_get int _p1,int _p2
rb_chk=-1
if (0<=_p1) & (_p1<rb_group_many) {
repeat rb_group_info(1,_p1)
sendmsg objinfo(rb_id(rb_group_info(0,_p1)+cnt),2),$F0
if stat=1 {
if _p2=0 : rb_chk=cnt : else : rb_chk=rb_id(rb_group_info(0,_p1)+cnt)
}
loop
}
return rb_chk
#global
rb_init
// ※グループ
// ラジオボタンとは、複数の選択肢からひとつだけを
// 選択する場合に用いられるボタンです。
// 複数の選択肢の1つのまとまりのことを、ここでは
// グループと呼んでいます。
// ※グループID
// グループを作成するごとにそれぞれにグループIDという
// のが与えられます。作成されたIDは rb_end 後、statに返ります。
// 設置された順に 0,1,2,3... となります。
// ※ラジオボタンID
// グループ内で、ラジオボタンを作成するごとにそれぞれに
// ラジオボタンIDというのが与えられます。
// 選択されていない項目のIDを取得することはできません。(仕様)
// 設置された順に 0,1,2,3... となります。
// ※あらかじめチェック
// あらかじめチェックするのは1グループに1つの項目にしてください。
// 選択項目が 0 になっていると rb_get で -1 が返ってしまいます。
// 選択項目が 2 つ以上あると rb_get で、一番数値が小さいものが
// 返ってしまいます。//// サンプル
objsize 100,24
rb_start
pos 0,0
rb_set "1",1
pos 100,0
rb_set "2",0
pos 200,0
rb_set "3",0
rb_end
group1=stat
pos 300,0
button gosub "チェック",*chk1
rb_start
pos 0,30
rb_set "A",1
pos 100,30
rb_set "B",0
pos 200,30
rb_set "C",0
rb_end
group2=stat
pos 300,30
button gosub "チェック",*chk2
stop
*chk1
dialog ""+rb_get(group1,0)+"の項目 (オブジェクトID:"+rb_get(group1,1)+") を選択中",,"選択中の項目"
return
*chk2
dialog ""+rb_get(group2,0)+"の項目 (オブジェクトID:"+rb_get(group2,1)+") をを選択中",,"選択中の項目"
return
おお! これは便利ですね^^!
ラジオボタン作るのにいちいちうだうだ書かなければならず、
面倒だったので非常に助かります。
機会があれば使わせてもらうかも知れません。
どうもありがとうございます!!
お役にたててうれしいです!
ゲームの設定用のファイルとかで使えますよね。(東方で言う環境カスタムプログラム)