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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0514
わおん実行と同時に11解決


わおん

リンク

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



この記事に返信する


てれてれ

リンク

2012/5/14(Mon) 19:36:36|NO.46636

わけがわからないよ。
もう少し具体的にオナシャス。



TMKL

リンク

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 様
やってみましたがよく分かりませんでした。
すみません。



TMKL

リンク

2012/5/15(Tue) 05:57:41|NO.46644

何をどう"やってみた"のか気になりますがその前に、

*pushのところでrepeat〜loopからgotoで抜けています
これはループのネストがたまるのでダメです
breakで抜けましょう

*pushから*setにとんでいるので、リストボックスがどんどん増えます
これもダメです
リストボックスの表示は一回にしましょう

>ファイルの実行と同時に要素が表示されてしまうのです。
>問題は、実行と同時に表示されることです。
で、どんなふうに表示されれば問題ないんですか?
「"出す"をクリックしたら表示したいのかな?」という予想は立てられますが、
正確には分かりません



TMKL

リンク

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 様
迅速な対応ありがとうございます。
ループとリストの件、了解しました。

表示部分を〜を試してみましたが、やはり駄目でした。
私が問題としているのは、「"出す"をクリックしたら表示したい」で合っています。

よろしくお願いします。



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に戻る



TMKL

リンク

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 様
コメントを付けてくださりありがとうございます。

>ってのは、私に作れと言っているのでしょうか(^_^;)

そうではありません。
あくまでもご教示です。

>自分で工夫してみては?

工夫した結果、ここに書き込むことになったのです。
分かりました。あとは自分でなんとかしてみます。

ありがとうございました。



TMKL

リンク

2012/5/15(Tue) 07:10:39|NO.46650

そういえば、
>stop(実行時に表示しないように止める)
のところは、repeat〜loopでも構いません



わおん

リンク

2012/5/15(Tue) 07:11:30|NO.46651

TMKL 様

入れ違いになりましたね。
スクリプト、ありがとうございます。
参考にいたします。



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