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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0730
ユーヤンoncmdがうまく機能しない?6解決


ユーヤン

リンク

2021/7/30(Fri) 16:31:51|NO.93378

oncmdでリセットボタンを押してから、oncmdがうまく機能しないのですが、どうすればいいのでしょうか。

#define WM_MOVE 0x0003 *start cls oncmd *cmd,WM_MOVE button "リセット",*rest stop *cmd dialog "ウィンドウが移動されました" stop *rest oncmd 0 goto *start



この記事に返信する


沢渡

リンク

2021/7/30(Fri) 17:24:46|NO.93379

oncmdはonkeyやonclickとは若干異なる仕様で、
一度oncmd 0で無効にしたら、oncmd 1するまでは
「oncmd *cmd,WM_MOVE」といった形で割り込み宣言しても有効にはなりません。
よって、「oncmd *cmd,WM_MOVE」の次の行に「oncmd 1」を加えると良いでしょう。



ユーヤン

リンク

2021/7/30(Fri) 18:37:54|NO.93380

>沢渡
ありがとうございます。そういう仕様だったのですね…。
でも、oncmd 0でWM_MOVEを割り込みを停止した状態で、oncmd WM_SIZEだけ割り込みを有効にするということはできないですよね?



沢渡

リンク

2021/7/30(Fri) 19:39:10|NO.93382

oncmd 0では割り込みを個別に無効化することはできないので、
私なら「何もせずにreturnするダミーのサブルーチン」に飛ばすようにします。
(他に望ましい方法があるかもしれませんが……)

#const WM_MOVE 0x0003 #const WM_SIZE 0x0005 flag=0 objsize 140,30 button gosub "",*tog : b_id=stat gosub *tog stop *tog flag=(flag=0) //flagが0の時は1に、1の時は0にする if flag { objprm b_id,"現在:MOVE有効" oncmd gosub *move,WM_MOVE oncmd gosub *dummy,WM_SIZE } else { objprm b_id,"現在:SIZE有効" oncmd gosub *dummy,WM_MOVE oncmd gosub *size,WM_SIZE } return *move //移動時にウィンドウ座標をタイトルに表示 title str(ginfo_wx1)+","+str(ginfo_wy1) return *size //最小化時にダイアログを出す if wparam=1 : dialog "最小化しました。" return *dummy return



ユーヤン

リンク

2021/7/31(Sat) 15:37:58|NO.93398

>沢渡さん
ありがとうございます。その方法しかないのですね…。残念
oncmd 0で個別に無効にすることができないということは、waitと併用するにはこの方法しかないということですよね?

#module #uselib "winmm" #func timeGetTime "timeGetTime" #deffunc wait2 int time StartTick=timeGetTime() repeat await 16 if (timeGetTime()-StartTick) >= time : break loop return #global #const WM_MOVE 0x0003 #const WM_SIZE 0x0005 flag=0 objsize 140,30 button gosub "",*tog : b_id=stat gosub *tog repeat wait2 1000 title ""+cnt+"秒" loop stop *tog flag=(flag=0) //flagが0の時は1に、1の時は0にする if flag { objprm b_id,"現在:MOVE有効" oncmd gosub *move,WM_MOVE oncmd gosub *dummy,WM_SIZE } else { objprm b_id,"現在:SIZE有効" oncmd gosub *dummy,WM_MOVE oncmd gosub *size,WM_SIZE } return *move //移動時にウィンドウ座標をタイトルに表示 title str(ginfo_wx1)+","+str(ginfo_wy1) return *size //最小化時にダイアログを出す if wparam=1 : dialog "最小化しました。" return *dummy return



沢渡

リンク

2021/8/1(Sun) 08:12:23|NO.93415

この方法しかないかどうかは断言できませんが、少なくとも私ならそうするかな、
ということで。
ただ、ダミーのサブルーチンに飛ばすだけでも割り込み自体は発生するので、
「waitやawaitで待っている途中で割り込みが発生したら、残りの待ち時間をスキップして
次の処理に行ってしまう」という現象が発生することは踏まえる必要があります。
(今回のコードではtimeGetTimeで時間計測しているので、その点ではあまり問題はありませんが)



ユーヤン

リンク

2021/8/2(Mon) 22:33:52|NO.93449

返信が遅くなってすみません!
ありがとうございました!



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