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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0603
クロbuttonのobjableでの制御について3解決


クロ

リンク

2020/6/3(Wed) 23:19:30|NO.90687

buttonにgoto命令を付与している場合、objableによりbuttonを無効化した場合でもラベル移動は有効になっているのでしょうか。

現在下記のようなプログラムを書いています。(概要だけ記載します。)

*初め
button1 goto *ボタン押した
button2 goto *ボタン押した
button3 goto *ボタン押した
stop

*ボタン押した
mmplayでクリック音再生
押されたボタンによって数値計算
objable でボタン1〜3を無効化
*範囲外だった
onclick goto *クリックした
stop

*クリックした
もし、クリック箇所が指定範囲内だったら *初め へ
それ以外なら *範囲外だった へ
stop


上記のような流れのコードを書いております。
なお、ボタンは別途フラグ管理をして、一度押されたボタンはボタン生成後にobjableで無効化する処理を挟んでいます。
2点困っている現象が生じており、
1つ目は、ボタン押下後の画面クリック待ちの間に他のボタンを押すと、クリック音が再生されてしまいます。(ボタン押下時点ですべてのボタンはグレーアウトしています)
数値などに影響は出ておらず、音声がなってしまうという点が不都合なため修正したく質問をさせていただきました。
2点目は、上記と類似の原因かと思うのですが、すでに押したボタン(グレーアウトされているボタン)をクリックすると、通常のオペレーション同様、画面の指定範囲内をクリックしないと次の操作に移れないという現象です。
こちらも、無駄な操作を要求されるだけで、数値に影響は出ていない状況です。


現象だけ見ると、objableによる制御はできている(見かけ上のグレーアウトも、数値に影響が出ていない点からも)
一方で、プログラムの処理だけ流れているような不思議な状況で原因が全然つかめません。

どうかお力をお貸しください。よろしくお願いします。



この記事に返信する


沢渡

リンク

2020/6/4(Thu) 01:34:30|NO.90689

試してはいませんが、
>もし、クリック箇所が指定範囲内だったら *初め へ
これが怪しいような気がします。
このコードで *初め にジャンプすると、既存のボタンの上にまた新たに3つボタンが作られる
ことになり、誤動作の原因になるのではないかと。

あと、onclickを置いている位置も気になりますが。



沢渡

リンク

2020/6/4(Thu) 11:26:08|NO.90691

実際のコードが無いので、状況を推測した上でサンプルコードを組んでみました。
とりあえず押さえておきたい点は、

・ボタンがすでにある状態で再度buttonを実行すると、
 ボタンが二重に作られてしまう。

・onclickは「stopやwait、await時にマウスをクリックしたら指定先にジャンプする」
という「割り込み宣言」であり、それ自体にはジャンプさせる効果はない。

・onclickが有効な状態で、objenableで無効化したボタンをクリックした場合、
ボタン割り込みの代わりにクリック割り込みが発生して
onclickの指定先にジャンプする。


mmload dir_exe+"\\hsptv\\se_click.wav",0 //ここでは仮にHSPサンプルにあるwavを使用する。 mmload dir_exe+"\\hsptv\\se_aaa.wav",1 mmload dir_exe+"\\hsptv\\se_jump.wav",2 button goto "ボタン1",*but1 id1=stat button goto "ボタン2",*but2 id2=stat button goto "ボタン3",*but3 id3=stat onclick goto *click stop *but1 //ボタン1を押した時の処理。ここでは仮にタイトルを変更する。 mmplay 0 title "ボタン1が押されました" goto *not_enable *but2 //ボタン2を押した時の処理。ここでは仮にタイトルを変更する。 mmplay 1 title "ボタン2が押されました" goto *not_enable *but3 //ボタン3を押した時の処理。ここでは仮にタイトルを変更する。 mmplay 2 title "ボタン3が押されました" goto *not_enable *not_enable //ボタンを無効にする objenable id1,0 objenable id2,0 objenable id3,0 stop *click //ボタン以外の場所をクリック。ただし、無効なボタンを押した場合もここにジャンプする。 mx=mousex : my=mousey //マウス位置 //範囲チェック。(ここでは仮にボタン周辺を『指定範囲』とする) if (mx>=0)&(mx<100)&(my>=0)&(my<150) { //指定範囲内をクリックした時の処理 //今回は特に何もしない } else { //指定範囲外をクリックした時の処理 dialog "指定範囲外をクリックしました。" } stop



クロ

リンク

2020/6/4(Thu) 20:42:06|NO.90692

沢渡さん ご回答いただきありがとうございます。
わざわざ丁寧にサンプルまで提供いただき恐縮です。

onclickの挙動や、無駄なボタン生成によるコードの冗長性など非常に勉強になりました。
指摘を参考にプログラムを見たところ、無事原因を理解しつつ改善することができました。

わかりやすいご回答がいただけて良かったです、ありがとうございました!



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