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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1012
楽園マウスクリックの入力が効かなくなる9未解決


楽園

リンク

2013/10/12(Sat) 20:59:02|NO.57577

現在、ボタンの入力をbutton命令ではなく、マウスが指定範囲にありクリックしたら認識されるようにプログラムを書いています。
基本的に認識してくれるのですが、時々クリックを認識してくれないことがあります。
新しいウィンドウを生成してそこに描画先を移動したり、元あったウィンドウを消して他のウインドウで描画すると起きるようなのですが原因が分かりません。
似たような症状を経験した方や知識をお持ちの方が居ましたら教えてください。



この記事に返信する


暇人

リンク

2013/10/12(Sat) 21:27:01|NO.57578

mousex、mouseyは操作先のウィンドウ上にあるマウスカーソルの座標を取得する命令
取得前にgselで指定範囲のあるウィンドウを指定すれば良い



楽園

リンク

2013/10/13(Sun) 03:32:16|NO.57581

きちんとgselしており普通はきちんと認識します。
何か特定の条件が原因な気がするのですがなかなか見つけることができません。
再度操作ウィンドウがきちんとしてされてるか見直しみますが、他の原因に心当たりがある方は教えてくださると嬉しいです。



pizza

リンク

2013/10/13(Sun) 04:26:57|NO.57582

oncmdかonclickを使った方がやりやすい気がします。
↓だとid1が選択されていても、反応してくれます。


#include "user32.as" #define WM_LBUTTONUP 0x0202 rect = 200, 100, 250, 150 boxf rect(0), rect(1), rect(2), rect(3) wid = 0 oncmd gosub *lb_OnLButtonUp, WM_LBUTTONUP screen 1 stop *lb_OnLButtonUp if ginfo_intid == wid { x = lparam&0xFFFF y = lparam>>16&0xFFFF PtInRect varptr(rect), x, y if stat { // 領域がクリックされた dialog "" } } return



暇人

リンク

2013/10/13(Sun) 07:25:01|NO.57584

>きちんとgselしており普通はきちんと認識します。
してるならクリック判定に間違いがあるか(どんな判定してるかも分からないから何とも言えんが)
描画先を移動がgselの事で、この後に不具合が出るなら
gselするウィンドウID間違えてるのが原因な気がするけど・・・

常にマウス座標表示(数値だけじゃなくカーソル位置に何か表示させる)させて何が原因なのか調べてる?
指定範囲にmousex、mouseyが行かないのか
指定範囲内なのにクリックが反応しないのかとか



葡萄色

リンク

2013/10/13(Sun) 13:27:09|NO.57586

確か、mousexとmouseyってオブジェクトの上にカーソルを持っていくと、正しい座標が代入されなかったような気がするんですが。。。



きのよー

リンク

2013/10/14(Mon) 21:53:25|NO.57609

これを最初につけちゃえば、多少重くはなるけど正確にマウス座標が割り出せる。

#undef mousex
#undef mousey
#define mousex (ginfo(0)-(ginfo(4)+(ginfo(10)-ginfo(12))/2))
#define mousey (ginfo(1)-(ginfo(5)+(ginfo(11)-ginfo(13))-((ginfo(10)-ginfo(12))/2)))

あと気になったのは、getkeyとかstickで判定するなら、waitで止まっている間のクリックは取りこぼすことくらい。



楽園

リンク

2013/10/16(Wed) 02:11:36|NO.57622

今ちょっと手を付けられてないですが、参考にして原因を解決していこうと思います。
ご意見、アドバイスを頂いたみなさんありがとうございました。



名無し

リンク

2013/10/16(Wed) 11:40:50|NO.57629

ソースコードを晒したほうが早いのでは



さか

リンク

2013/10/17(Thu) 00:11:37|NO.57646

どういう処理してるかわかりませんが、pizzaさんのアドバイスのようにイベントで取得
したほうが良いですよ。
無限ループの場合だと処理が重くなるほど取得命令を通る頻度が減っていくので反応が
悪くなります。きのよーさんの言ってるよう単純にループ内のwaitがあればその待ち時
間中は取得できませんし。



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