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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1130
てんモジュール内で割り込み(onclickなど)9解決


てん

リンク

2016/11/30(Wed) 06:44:03|NO.77413

お世話になります。

すみません、以下、頭が混乱していてご教示頂けますと幸いです。

モジュール内でonclickなど割り込みを完結させた場合、
複数の同種の割り込みを、スクリプト内に作成することはできますでしょうか。

例えばonclickルーチンを含む、5つのモジュール1〜5を#includeした場合、
マウスクリック時にはそれぞれのモジュール内で同時に処理が完結するのでしょうか。

その場合パラメータやstatやIDなど、他に依存するような値があった場合、
モジュール単体時と比べて独立性(?)を維持できるのでしょうか。

すみません、混乱していて、質問が正しく出来ているのか、
自分が何を質問しようとしてるのかが良く判りません(汗)
ただ、もやもやしており、ご教示頂けますと幸いです。



この記事に返信する


掘木

リンク

2016/11/30(Wed) 08:53:22|NO.77414

実際にモジュールを作成し、挙動を観察してみると明確よ。

端的に答えると、そんなの不可能です。自前でディスパッチするか、リストを拵えて処理しないといかん。

もし仮にできても、マルチスレッドでないHSPで”同時に実行”は基本的にあり得ない。順序が存在するよ。



てん

リンク

2016/11/30(Wed) 09:54:10|NO.77415

ご教示ありがとうございます。

#moduleの理解が曖昧なため

HSP特有の常套手があったりするのかもと思ったもので、

おかげですっきりしました。



くちくん

リンク

2016/12/1(Thu) 19:23:07|NO.77427

匿名ラベル
http://quasiquote.org/hspwiki/%E5%8C%BF%E5%90%8D%E3%83%A9%E3%83%99%E3%83%AB
こんなものがあります
これを使えばモジュール内での使用も可能でしたよ



てん

リンク

2016/12/2(Fri) 19:48:01|NO.77432

くちくん様
追加情報ありがとうございます!

凄そう…ですが、理解がついていきません>< 。

すみません、

ラベルを '{} に置き換えられる(=その場で完結できる)ってことで宜しいでしょうか。

出来ましたら、愚かなわたくしめに %や quote の意味するところを日本語で

教えて頂けないでしょうか。

また、oncmd gosub *hoge ,$111 に対応できる記述をご教示頂けますと幸いです。

「,$111」の部分をマクロ側に含めないといけないような気がするのですが、

どうすれば良いかわかりませんm(_ _)m



てん

リンク

2016/12/3(Sat) 11:59:51|NO.77439

自己レスです。

特殊展開マクロ難しいですね…

oncmd gosub *hoge ,$111については、
何となくですが、使い分けで何とかなるのかな。。。
ただ、自分のやりたいことがぼやけているので検証不十分です

#define ` %tquote *%i : if 0 : *%o
#define `` %tquote *%i,$111 : if 0 : *%o

特に「if 0 : *%o」の部分の意味が分かりませんT-T



くちくん

リンク

2016/12/3(Sat) 15:54:06|NO.77440

oncmdでの特殊展開マクロの使用ができませんでした(自分のやり方が悪いかも)
申し訳ありませんでした。

#module #deffunc init ;init = 初期化の意。ご自由に変更してください oncmd gosub *hoge,$100 ;$100(キーボードPUSH) はサンプル上。訂正してください *hoge mes "処理だよ" ;処理内容をここに return #global init ; 初期化
この形にすればモジュール内のoncmdでのラベル使用ができました。
要望と異なっていたらすみません。



くちくん

リンク

2016/12/3(Sat) 15:58:03|NO.77441

ちなみにモジュール内のラベルとして機能していることは
このスクリプトで検証しています

#module modname #deffunc init ;init = 初期化の意。ご自由に変更してください oncmd gosub *hoge,$100 ;$100(キーボードPUSH) はサンプル上。訂正してください *hoge mes "モジュール内処理だよ" ;処理内容をここに return #global init ; 初期化 button gosub "1",*hoge button gosub "2",*hoge@modname stop *hoge mes "モジュール外" return>
[1] ではモジュール外のラベル、
[2]orキーボード操作ではモジュール内のラベルの動作をしていることがわかります。
@modnameのmodnameと、#module modname のmodnameは、
どちらも統一すれば別のものでも使用可能です。



掘木

リンク

2016/12/3(Sat) 21:30:11|NO.77443

回答はしたものの話の流れが全く読めない…一体どういうことなのでしょう。

くちくんさんの話はモジュール内でonclick等の割り込みを完結させる記述に関して述べられているように見えます。
てんさんの本題は「そのようなモジュールがある」前提で、
「同一の割り込み条件を持つモジュール」が共存できるか の話なのでは?と。

#module #deffunc LButtonAccept_Init onclick gosub *LBA_clicked return *LBA_clicked if iparam == 0 : mes "LButton Hitted." return #global LButtonAccept_Init #module #deffunc RButtonAccept_Init onclick gosub *RBA_clicked return *RBA_clicked if iparam == 3 : mes "RButton Hitted." return #global RButtonAccept_Init
モジュール自体はこんな感じの記述になるような気がします。
展開マクロを用いても、展開後の形はこんな感じになると思います。

この場合、RButtonAcceptのみが動きます。(on系命令は上書きなので)。

結論:
もしまともに完結するようにするならば、既存のonclick等のジャンプ先ラベルを取得し、
そちらに委譲するようなコードを書く必要がある。



てん

リンク

2016/12/4(Sun) 02:32:06|NO.77445

掘木さま

追加補足ありがとうございます。

>展開マクロを用いても、展開後の形はこんな感じになると思います。
>この場合、RButtonAcceptのみが動きます。(on系命令は上書きなので)。

なるほど。
おかげで、ぼやけていたものがはっきりしました^-^;

結局は、最初に仰って頂いていた「リストを拵えて処理…」が必要なんですね。
展開マクロをうまく使うと、その壁をどうにか出来るのかも…と考えておりました。。
ありがとうございます。



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