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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0914
けん購入時に listboxの選択アイテムを消す8解決


けん

リンク

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



この記事に返信する


123

リンク

2013/9/14(Sat) 10:34:34|NO.57128

アイテム購入したらlistbox作り直したらいいんじゃない?
何番目かはわかってるんだし。



Humi

リンク

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



fortunehill

リンク

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 *@



123

リンク

2013/9/14(Sat) 17:04:40|NO.57138

なんか適当なこと書いたみたいですみません…
ソースは未だによくは見てないけども、
そのアイテム持ってたらリピートでリストボックス文字列に追加する部分で
消したい場合はcontinueをやってスキップするか、さらに文字列に購入済みって付け加えると
いいんじゃないの?



けん

リンク

2013/9/15(Sun) 00:59:50|NO.57143

ありさん、またありがとうございました。
fortunehillさん、コンパクトにまとめてくださりありがとうございます。
これは、今後の参考にしたいと思います。
皆様ありがとうございました。

購入済の記入ができるようになりました。

listbox内の削除については、皆様の意見を参考に作成したいと思います。

躓いたときは、また相談に乗らせていただきます。



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