|
|
|
2013/9/14(Sat) 10:18:09|NO.57127
アイテム購入時の処理について教えてください。
したいことは、アイテム購入時にlistbox内の選択アイテムを消したいと思っています。
もしくは、購入済みです。と入れたいです。
参考として下に作ったデータをおいて置きます。
よろしくお願いいたします。
#module
#defcfunc fun_GetKenName int ken_id
if kens=0 {//fun_GetKenNameの度に県名入れるのは無駄なので
sdim kens;
kens(0) = "北海道","青森県","岩手県","宮城県","秋田県"
kens(5) = "山形県","福島県","茨城県","栃木県","群馬県"
kens(10) = "埼玉県","千葉県","東京都","神奈川県","新潟県"
kens(15) = "富山県","石川県","福井県","山梨県","長野県"
kens(20) = "岐阜県","静岡県","愛知県","三重県","滋賀県"
kens(25) = "京都府","大阪府","兵庫県","奈良県","和歌山県"
kens(30) = "鳥取県","島根県","岡山県","広島県","山口県"
kens(35) = "徳島県","香川県","愛媛県","高知県","福岡県"
kens(40) = "佐賀県","長崎県","熊本県","大分県","宮崎県"
kens(45) = "鹿児島県","沖縄県"
}
ken_name = kens(ken_id)
return ken_name
#global
onerror *jj ;エラーが出た場合飛ぶ
iddat=0,5,7,1,10,6,9,20
kenString=""
repeat length(iddat)
id=iddat(cnt)
kenString+fun_GetKenName(id) + "\n"
ken_id(cnt)=id //県IDを県名順に保存(listboxの順番と県IDをセットにする)
loop
ken_index = 0
listbox ken_index,100,kenString : lb_ID = stat
hListbox = objinfo(stat, 2)
//listbox a, 60, listdata : lb_ID = stat
cb_flag = 0 ; comboxが表示中かどうかのフラグ
button "購入", *check
stop
*check
; 特定の項目の文字列を取得 (LB_GETTEXT)
; 第3パラのwparam値にインデックス番号(0〜)、
; 第4パラのlparam値に取得した文字列を入れる変数ポインタを指定
; listboxから選択した項目を取得しcombox用の文字列に追加
if flag(ken_index/47) & (1<<(ken_index&47)),*jj// kenmei bitが 0でなかったらなんにもしないで return。
flag(ken_index/47) |= 1<<(ken_index&47) // 登録する時 kenmei bitを 1にしておく。(または 配列変数を1にしてもよい)
notesel kenString
noteget getlist, ken_index
notesel combdata
noteadd Getlist
; comboxが非表示なら表示、表示中なら内容を書き換え
if cb_flag = 0 {
b = 0
combox b,100,combdata : cb_ID = stat
cb_flag = 1
} else {
objprm cb_ID, combdata
objprm cb_ID, 0
}
objsel cb_ID ; comboxにフォーカスを移動
*jj
| |
|
2013/9/14(Sat) 10:34:34|NO.57128
アイテム購入したらlistbox作り直したらいいんじゃない?
何番目かはわかってるんだし。
|
|
2013/9/14(Sat) 11:09:52|NO.57130
kensのそれの配列番号の中身を替えたらいいんじゃないでしょうか?
|
|
2013/9/14(Sat) 11:17:58|NO.57131
県名はkenStringに文字列として入っているので
(配列変数kensはデータ定義にしか使われていません)
notedelで変数kenStringから選択したアイテムの行(ken_index)を削除して
objprmでlistbox(lb_ID)の内容を書き換えれば可能です。
|
|
2013/9/14(Sat) 11:24:19|NO.57132
・・・と、書いてはみたものの
listboxの内容ではなくて、県名データ(kens)そのものを変えるのでしたら
また別の方法になりますね。
|
|
2013/9/14(Sat) 12:02:41|NO.57134
削除よりは処理が楽だったので
暫定的に購入済みマークをつけるサンプルを作ってみました。
#module
#defcfunc fun_GetKenName int ken_id
if kens=0 {//fun_GetKenNameの度に県名入れるのは無駄なので
sdim kens;
kens(0) = "北海道","青森県","岩手県","宮城県","秋田県"
kens(5) = "山形県","福島県","茨城県","栃木県","群馬県"
kens(10) = "埼玉県","千葉県","東京都","神奈川県","新潟県"
kens(15) = "富山県","石川県","福井県","山梨県","長野県"
kens(20) = "岐阜県","静岡県","愛知県","三重県","滋賀県"
kens(25) = "京都府","大阪府","兵庫県","奈良県","和歌山県"
kens(30) = "鳥取県","島根県","岡山県","広島県","山口県"
kens(35) = "徳島県","香川県","愛媛県","高知県","福岡県"
kens(40) = "佐賀県","長崎県","熊本県","大分県","宮崎県"
kens(45) = "鹿児島県","沖縄県"
}
ken_name = kens(ken_id)
return ken_name
#global
onerror *jj ;エラーが出た場合飛ぶ
iddat=0,5,7,1,10,6,9,20
kenString=""
repeat length(iddat)
id=iddat(cnt)
kenString+fun_GetKenName(id) + "\n"
ken_id(cnt)=id //県IDを県名順に保存(listboxの順番と県IDをセットにする)
loop
ken_index = 0
listbox ken_index,100,kenString : lb_ID = stat
hListbox = objinfo(stat, 2)
//listbox a, 60, listdata : lb_ID = stat
cb_flag = 0 ; comboxが表示中かどうかのフラグ
button gosub "購入", *check
stop
*check
notesel kenString
noteget getlist, ken_index
; アイテムの頭に印があれば処理を中断
cstr = strmid(getlist, 0, 2)
if cstr = "※" : dialog "購入済です" : return
notesel combdata
noteadd Getlist
; comboxが非表示なら表示、表示中なら内容を書き換え
if cb_flag = 0 {
b = 0
combox b,100,combdata : cb_ID = stat
cb_flag = 1
} else {
objprm cb_ID, combdata
objprm cb_ID, 0
}
; 購入したアイテムに印をつける
notesel kenString
noteadd "※" + getlist, ken_index, 1
objprm lb_ID, kenString
objprm lb_ID, ken_index
return
*jj
| |
|
2013/9/14(Sat) 14:06:30|NO.57136
/*ご参考(原型を大幅に崩してしまって申し訳ない)*/
#module
#defcfunc fun_GetKenName int ken_id,local ss
if (vartype(kens) != 2) {kens = "北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県 "
kens += "茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 "
kens += "潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 "
kens += "静岡県 愛知県 三重県 滋賀県 京都府 大阪府 兵庫県 "
kens += "奈良県 和歌山県 鳥取県 島根県 岡山県 広島県 山口県 "
kens += "徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 "
kens += "熊本県 大分県 宮崎県 鹿児島県 沖縄県"}
if (ken_id >= 0) {split kens," ",ss :ss = ss(ken_id)} else {ss = kens}
return ss
#global
ss = fun_GetKenName(-1) :strrep ss," ","\n"
listbox ken_index,100,ss :lb_ID = stat
:hListbox = objinfo(stat,2)
cb_flag = 0
button "購入", *check
stop
*check
if (flag(ken_index/47) and (1<<(ken_index&47))) {goto *@f}
flag(ken_index/47) |= 1<<(ken_index&47)
notesel combdata
noteadd fun_GetKenName(ken_index)
sendmsg hListbox,$182,ken_index
ss = "******"
sendmsg hListbox,$181,ken_index,varptr(ss)
if (cb_flag == 0) {b = 0 :combox b,100,combdata :cb_ID = stat :cb_flag = 1}
else { :objprm cb_ID,combdata :objprm cb_ID, 0}
sendmsg objinfo(cb_ID,2),$014F,1
*@
| |
|
2013/9/14(Sat) 17:04:40|NO.57138
なんか適当なこと書いたみたいですみません…
ソースは未だによくは見てないけども、
そのアイテム持ってたらリピートでリストボックス文字列に追加する部分で
消したい場合はcontinueをやってスキップするか、さらに文字列に購入済みって付け加えると
いいんじゃないの?
|
|
2013/9/15(Sun) 00:59:50|NO.57143
ありさん、またありがとうございました。
fortunehillさん、コンパクトにまとめてくださりありがとうございます。
これは、今後の参考にしたいと思います。
皆様ありがとうございました。
購入済の記入ができるようになりました。
listbox内の削除については、皆様の意見を参考に作成したいと思います。
躓いたときは、また相談に乗らせていただきます。
|
|