|
![](../images/spacer.gif) |
|
2012/5/14(Mon) 12:56:04|NO.46635
連投すみません。
昨日の処理が解決したと思いましたら、また問題が表れました。
リストボックスを設置し、選択した要素を表示させたいのですが、
ファイルの実行と同時に要素が表示されてしまうのです。
複数なのはそういう配列を持っている為です。
問題は、実行と同時に表示されることです。
下記のソースで不具合を再現してみました。
誤りがあればご教示して頂けると幸いです。
color 0,0,0 :boxf 299,384,368,348 :color 255,255,255 :boxf 300,383,367,349
font "MS Pゴシック",22,1 :pos 310,356 :color 0,0,0 :mes "出す"
repeat 3
sdim hand,50
sdim data,50
sdim get,50
sdim c_name,50
dim p_field,3
dim p_field_x,3 :dim p_field_y,3
field_x.cnt=cnt*50+350
field_y.cnt=300
c_data="a\nb"
notesel c_data
c_max=notemax
sdim c_name,50,c_max
repeat c_max
noteget get,cnt
size=0
getstr c_name.cnt,get,size,','
loop
hand=0
c_type=1
data="0-a\n1-b\n2-c\n3-d\n4-e"
loop
*set
pos 300,390 :objsize 200,24
listbox hand,70,data
notesel data
noteget get,0
notedel 0
get=int(get)
repeat 3
if p_field.cnt=-1 { p_field.cnt=get :break }
loop
repeat 3
if p_field(cnt)!-1 {
font "MS Pゴシック",15,16 :color 0,0,0
pos field_x.cnt,field_y.cnt
mes c_name.p_field(cnt)
}
loop
goto *push
*push
repeat
stick ky,0,1
if ((((ky=256)&(mousex>=335))&(mousex<=400))&(mousey>=350))&(mousey<=385) {
goto *set
}
await 3
loop
![](../images/bbs/mark_main.gif)
| |
|
2012/5/14(Mon) 19:36:36|NO.46636
わけがわからないよ。
もう少し具体的にオナシャス。
|
|
2012/5/14(Mon) 19:55:10|NO.46637
要素の表示前にstopを入れて、
表示部分をサブルーチンにするといいと思います
スクリプトのどこで何をしてるのかわかりませんが . . .
|
|
2012/5/15(Tue) 04:09:07|NO.46642
てれてれ 様
失礼しました。
コメントも書くべきでしたね。
26行目の*setでリストボックスの作成とその要素を取り出すノートパッド命令。
35行目のif p_field.cnt=-1で、要素の読み込み。
39行目のif p_field(cnt)!-1 {で、要素を表示です。
TMKL 様
やってみましたがよく分かりませんでした。
すみません。
|
|
2012/5/15(Tue) 05:57:41|NO.46644
何をどう"やってみた"のか気になりますがその前に、
*pushのところでrepeat〜loopからgotoで抜けています
これはループのネストがたまるのでダメです
breakで抜けましょう
*pushから*setにとんでいるので、リストボックスがどんどん増えます
これもダメです
リストボックスの表示は一回にしましょう
>ファイルの実行と同時に要素が表示されてしまうのです。
>問題は、実行と同時に表示されることです。
で、どんなふうに表示されれば問題ないんですか?
「"出す"をクリックしたら表示したいのかな?」という予想は立てられますが、
正確には分かりません
|
|
2012/5/15(Tue) 06:16:17|NO.46645
で、表示部分をサブルーチンにするっていうのはこんな感じです
実行しても、"表示"をクリックするまで表示されません
わおんさんのやりたいことと違ったらすみません
button gosub "表示",*表示;「文字を表示するサブルーチン」にとぶボタンを作成
stop;ここで止める
*表示;文字を表示するサブルーチン
x++;表示回数を数える
color 255,255,255
boxf 0,24;白で塗りつぶす
pos ,24
color
mes ""+x+"回目の表示";表示する
return;stopに戻る
|
|
2012/5/15(Tue) 06:47:43|NO.46646
TMKL 様
迅速な対応ありがとうございます。
ループとリストの件、了解しました。
表示部分を〜を試してみましたが、やはり駄目でした。
私が問題としているのは、「"出す"をクリックしたら表示したい」で合っています。
よろしくお願いします。
|
|
2012/5/15(Tue) 07:03:44|NO.46647
>よろしくお願いします
ってのは、私に作れと言っているのでしょうか(^_^;)
自分で工夫してみては?
ほら、わおんさんのスクリプトにコメントをつけてみました
問題点が分かりやすいですよね
color:boxf 299,384,368,348
color 255,255,255:boxf 300,383,367,349
color
font "MS Pゴシック",22,1
pos 310,356:mes "出す"
;"出す"ボタンを作る
repeat 3;ループ開始
sdim hand,50
sdim data,50
sdim get,50
sdim c_name,50
;文字列 hand data get c_name を作る
;(ループ内にあるのはおかしいと思う)
dim p_field,3
dim p_field_x,3
dim p_field_y,3
;数値 p_field p_field_x p_field_y を作る
;(ループ内にあるのはおかしいと思う)
field_x.cnt=cnt*50+350
;field_x に 350,400,450を代入
;p_field_xじゃないのか . . .
field_y.cnt=300
;field_y に 300を代入
;p_field_yじゃないのか . . .
c_data="a\nb"
;c_dataに"a\nb"を代入
;(ループ内にあるのはおかしいと思う)
notesel c_data;c_dataをnote系命令の操作対象にする
c_max=notemax;c_max に c_data の行数を入れる
sdim c_name,50,c_max
;文字列 c_name を 行数個 作る
;(ループ内にあるのはおかしいと思う)
repeat c_max;行数回ループ
noteget get,cnt
;getに c_data のcnt行目を入れる
size=0
getstr c_name.cnt,get,size,','
;c_nameのcnt番にget の内容を入れる
loop
hand=0;handに0を代入(最初に文字列で初期化した意味なし & ループに入れる意味が分からない)
c_type=1;c_typeに1を代入
data="0-a\n1-b\n2-c\n3-d\n4-e";dataに"0-a\n1-b\n2-c\n3-d\n4-e"を代入
loop;ループ終わり
*set
pos 300,390
objsize 200,24
listbox hand,70,data
;リストボックスの表示
;(*setに来るたびにどんどん増える)
notesel data;dataをnote系命令の操作対象にする
noteget get,0;dataの0行目をgetに入れる
notedel 0;dataの0行目を消す
get=int(get);getを整数にする
repeat 3
if p_field.cnt=-1 { p_field.cnt=get :break }
;もしp_field.cntが-1なら、getの値を入れてループ脱出
loop
repeat 3
if p_field(cnt)!-1 {
font "MS Pゴシック",15,16 :color 0,0,0
pos field_x.cnt,field_y.cnt
mes c_name.p_field(cnt)
}
;もしp_field.cntが-1以外なら、
;x 350,400,450 y 300 に
;c_name.p_field(cnt) を表示
;(ここがおそらく要素の表示
;stopとかないから、実行した途端表示されて当然)
loop
goto *push
*push
repeat
stick ky,0,1
if (ky=256)&(mousex>=335)&(mousex<=400)&(mousey>=350)&(mousey<=385){
goto *set
}
;もし 335 <= x <=400 350 <= y <= 385 がクリックされたら
;*setへとぶ
;スタックがたまりまくって、32回くらいクリックするとバグる
;あと、最初に作った"出す"ボタンからズレてる
await 3
loop
スクリプトの流れくらいは書いときます
変数の初期化
リストボックスの表示
"出す"ボタンの表示(gosubにする)
stop(実行時に表示しないように止める)
*表示サブルーチン
表示する
returnでstopに戻る
![](../images/bbs/mark_main_g.gif)
| |
|
2012/5/15(Tue) 07:08:32|NO.46648
仕方ないから、リストボックスの表示までやってみました
これをよく見て、自分のスクリプトに組み込んでください
a=0;行数が入る変数
notesel b;変数bをnote系命令の操作対象にする
b="APPLE\nORANGE\nGRAPE";bにリストボックスの内容を入れる
objsize 120
listbox a,120,b;リストボックスの表示
button gosub "表示",*表示;「文字を表示するサブルーチン」にとぶボタンを作成
stop;表示前にストップ
*表示;文字を表示するサブルーチン
color 255,255,255:boxf 0,168;白で塗りつぶす
noteget temp,a;tempに、bのa行目を代入
color;黒にする
pos 0,168
mes temp;bのa行目を表示
return;stopに戻る
|
|
2012/5/15(Tue) 07:09:27|NO.46649
TMKL 様
コメントを付けてくださりありがとうございます。
>ってのは、私に作れと言っているのでしょうか(^_^;)
そうではありません。
あくまでもご教示です。
>自分で工夫してみては?
工夫した結果、ここに書き込むことになったのです。
分かりました。あとは自分でなんとかしてみます。
ありがとうございました。
|
|
2012/5/15(Tue) 07:10:39|NO.46650
そういえば、
>stop(実行時に表示しないように止める)
のところは、repeat〜loopでも構いません
|
|
2012/5/15(Tue) 07:11:30|NO.46651
TMKL 様
入れ違いになりましたね。
スクリプト、ありがとうございます。
参考にいたします。
|
|