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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1121
koashow度々すいません・・・4解決


koashow

リンク

2008/11/21(Fri) 20:50:30|NO.20938

先ほどの「enter」については解決したのですが、
「enter」を押したら「input」に戻りたい。
「enter」を押し続けると「正解」になり続けてしまう。
このような問題はどのようにすれば解決できますか?

gsel 0 sdim TOI,1000 notesel TOI noteload "800.txt" KAZU=noteinfo(0) font "MS ゴシック",33 KAI=0 *KURIKAESHI buffer 3,ginfo(20),ginfo(21) sendmsg hwnd, $112, $F030 gsel 0 font "MS ゴシック",33 pos 0,2 notesel TOI noteget MONDAI,KAI*2 mes MONDAI pos 100,50 objmode 2 redraw 0 onkey gosub *check pos 300,200 font "MS ゴシック",60,16 objmode 2 s="" input s,500,100 redraw 1 stop *check if wparam=13{ objsel -1 cls font "MS ゴシック",50 pos 100,50 notesel TOI noteget SEIKAI,KAI*2+1 if s=SEIKAI:mes"正解\n(次の画面)" : else : mes"失敗" KAI++ wait 200 if (KAZU/2)=KAI :end cls 0 goto *KURIKAESHI } stop

※スクリプトの前半は省略

上のようなものを作っています(はじめから、これを見せればよかった・・)



この記事に返信する


いかろ

リンク

2008/11/21(Fri) 21:56:40|NO.20941

enterキーが放されたかどうかを感知して放されたことが分かったらinputに飛べばいいので
はないでしょうか。



koashow

リンク

2008/11/21(Fri) 22:15:22|NO.20942

すいません、また言葉が足りませんでした。

「enter」を押したら「input」に戻り「キャレット」が表示
(「input」内をクリックしないで入力ができる状態)されるようにしたいです。



flory

リンク

2008/11/21(Fri) 23:57:22|NO.20947

とりあえず、色々とモノ申す。

サンプル3行目および5行目。
noteloadのヘルプによると、
>メモリノートパッド命令のバッファは、自動的にファイルのサイズに従って確保サイズが調節されるため、バッファのサイズをあらかじめ指定しておく必要はありません。
とのことなので、sdim命令の必要はないですね。あってはいけないという訳ではありませんが。

サンプル12行目。
……何がしたいのかさっぱりわかりません。
どのみち、bufferはウィンドウではないので、hwndは無効になっているはずですよ?sendmsg命令は失敗していると思います。

サンプル20行目。
「objmode 2」としていますが、これは「*KURIKAESHI」の前に置いた方が良いでしょう。
動的にobjmodeを変更するのでない限り、繰り返しの中で何度もobjmode命令を呼ぶ必要はありません。繰り返しに入る前に一度だけ命令を使えば十分です。

サンプル23行目。
onkey命令ですが、20行目と同様、繰り返しに入る前に一度だけ命令を使えば十分です。

サンプル23行目。その2。
このスクリプトのままだと、問題をこなしていくうちにエラーが出ます。gotoとgosubの勉強をしっかりしましょう。

サンプル26行目。
20行目と同様。objmode命令は一度で良いです。

サンプル33行目。
「objsel -1」とする意義が見当たりませんね。何のためでしょう?

サンプル37行目。
notesel命令ですが、20行目と同様、繰り返しに入る前に一度だけ命令を使えば十分です。



で、本題。

>「enter」を押したら「input」に戻りたい。

inputボックスを配置した直後に、そのボックスに入力フォーカスを合わせれば良いです。
具体的には以下の通り。
「input s,500,100」の部分に、

input s,500,100 objsel stat
というように一行追加してみてください。


>「enter」を押し続けると「正解」になり続けてしまう。

正解画面もしくは失敗画面を表示している間にも、enterキーの入力を受け付けてしまうことが原因です。

onkeyによる割り込みはオン/オフの切り替えができます。詳しくはヘルプを参照。
ですので、正解画面もしくは失敗画面を表示している間はonkeyの割り込みをオフにしてやれば良いです。
具体的には、「*check」の所を、

*check if wparam=13{ onkey 0 ; ; 処理 ; onkey 1 goto *KURIKAESHI } stop
としてみてください。
もちろん、いかろさんの方法を実装できるなら、そうしてもらっても一向に構わないのですが。というより、そちらの方がベターな気がします。





蛇足。

掲示板にスクリプトを貼り付けるときは、「そのスクリプトだけで実行できる」ようにしておいた方が良いと思います。
NO.20938のサンプルの場合、koashowさんのパソコンならともかく、掲示板を見ている皆のパソコンには"800.txt"というファイルはありませんから、エラーになってしまいます。



koashow

リンク

2008/11/22(Sat) 20:14:59|NO.20963

回答・指摘ありがとうございます。
おかげで2つとも解決しました!



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