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 をするので使います。
これだけだといまいちどう使うのか想像できませんが、まあ解決したのなら良かったです。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.94664への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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