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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1211
二つのスクリーンがあったとしてどちらかのスクリーンにマウスが行ったことを検知する9解決


リンク

2021/12/11(Sat) 23:13:47|NO.94664

例えば、screen 0と、screen 1があったとし、
screen 1の方にマウスカーソルが行ったことを検知する方法はありますか?



この記事に返信する


zrs90(5さい)

リンク

2021/12/12(Sun) 07:31:44|NO.94666

onclick のサンプルと、掲示板の WindowFromPoint
の記事を参考にします。

各対象画面をクリックして判定しているのと
画面が全てスクリーン上に表示されているのが
条件です。...ダメならスルーして下さい。

1. #include "user32.as"

2. 各ウインドウハンドルを変数に取得
(※スクリーン0〜2 2を最前面に)

3. マウスクリックの処理 onclick goto

4. WindowFromPoint ginfo_mx , ginfo_my
...マウスクリックで、取得したウインドウハンドルを
変数に代入。

5. 2.と4.で拾った、ウインドウハンドルを
条件判定で処理して、別画面(※スクリーン2)に検知表示させる

...の流れで、可能と思います。

一応、ソース(50行程度)もあるのですが、自信がないのと
スマホで書いて送らないと、ダメなので...



秋野明宏

リンク

2021/12/12(Sun) 10:28:57|NO.94667

ウインドウの多重起動はほんとに必要だろうか?



ねんねこ5787

リンク

2021/12/12(Sun) 10:59:20|NO.94668

>>94667
僕が作っているペイントソフトには必要
(Toolbox、キャンバス)



zrs90(5さい)

リンク

2021/12/12(Sun) 13:23:07|NO.94671

...初めてやってみた。実行出来ないかも。(※誤字含む)
タブは、メモアプリで、一度入れたけど
こっちで見えない。一度、テストで送らせて下さい。
...スマホで打ち直しは、疲れた。

/*
hsp3.6 画面判定(試作)
21/12/12 13:20
*/


#include "user32.as" //ウインドウハンドル用 dim a , 3 //スクリーン2はピンク repeat 3 screen cnt a(cnt) = hwnd title "画面"+cnt+" "+a(cnt) if cnt = 2 : coler 255 , 128 ,128 : boxf loop coler 0 , 0 , 0 font "MS ゴシック" , 16 , 16 onexit goto *owari onclick goto *inmouse *ao stop *inmouse x = lparam & 0xffff : y = lparam >>16 WindowFromPoint ginfo_mx , ginfo_my gamen = stat if gamen = a(0) : mes "画面0 : "+a(0)+" mouse = “+iparam+" /x="+x+" /y="+y if gamen = a(1) : mes "画面1 : "+a(1)+" mouse = “+iparam+" /x="+x+" /y="+y if gamen = a(2) : mes "画面2 : "+a(2)+" mouse = “+iparam+" /x="+x+" /y="+y goto *ao *owari end



こいる

リンク

2021/12/12(Sun) 13:46:45|NO.94673

onclickやoncmdは、各ウィンドウに対して個別に設定できるので、WM_MOUSEMOVEメッセージ(マウスが移動した)の割り込みを登録することで、マウスカーソルが移動した判定ができると思います。

ただ、ウィンドウの複数表示は、gselによるウィンドウ操作先設定をミスることなどによるバグが出やすいですし、可読性も落ちやすいので、一度本当に複数ウィンドウが必要か考えてみてください。
1つのウィンドウにまとめれるのなら、そうした方がいいです。(ただ、設定画面などのモーダルウィンドウは例外)

というか、そもそもなぜこのような処理が必要なのか気になるのですが、どういったものに使うのでしょう?


#define WM_MOUSEMOVE 0x200 #define WM_MOUSELEAVE 0x2A3 screen 0 title "0" oncmd gosub *mouseMoveScreen0, WM_MOUSEMOVE screen 1 title "1" oncmd gosub *mouseMoveScreen1, WM_MOUSEMOVE // マウスが上にあるウィンドウのID(ウィンドウ外にあるかは分からない) windowIdHoveringMouse = ginfo_sel stop *mouseMoveScreen0 if (windowIdHoveringMouse != 0) { windowIdHoveringMouse = 0 gosub *moved } return *mouseMoveScreen1 if (windowIdHoveringMouse != 1) { windowIdHoveringMouse = 1 gosub *moved } return // 移動した *moved gsel windowIdHoveringMouse mes "移動 " + windowIdHoveringMouse + "へ" return



zrs90(5さい)

リンク

2021/12/12(Sun) 15:30:33|NO.94674

こいる さん/す さんへ

当方の、スキル不足です。申し訳ありません。
説明(※私のレベルでは、説明の時点で、理解まで至ってませんが)
ソースまで提供していただき、ありがとうございました。


当方のソース、3枚目のスクリーンについては
動作の様子が分かりすい様に
勝手に追加で、つけた物です。



リンク

2021/12/12(Sun) 16:05:06|NO.94676

>というか、そもそもなぜこのような処理が必要なのか気になるのですが、どういったものに使うのでしょう?
bmpsave をするので使います。
ありがとうございます。解決しました



リンク

2021/12/12(Sun) 16:10:04|NO.94677

あああああああああああああ



こいる

リンク

2021/12/12(Sun) 22:16:17|NO.94682

>す さん
>bmpsave をするので使います。
これだけだといまいちどう使うのか想像できませんが、まあ解決したのなら良かったです。



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