| 
					 
							
						
								
									  | 
								 
							 							 
							
						 
						
 
 | 
 | 
 
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内の削除については、皆様の意見を参考に作成したいと思います。 
 
躓いたときは、また相談に乗らせていただきます。 
 
 |   
  
					 |