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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1120
ポテト(流星群)ボタンのマウスオーバーを検出6解決


ポテト(流星群)

リンク

2013/11/20(Wed) 15:18:30|NO.58308

って出来ますかね?
マウスオーバー時のみ指定した変数に修正を行う等。
出来ないなら自作ボタン作って妥協することにしますが…



この記事に返信する


FunnyMaker

リンク

2013/11/20(Wed) 18:07:36|NO.58310

できますよ。

WindowFromPoint関数を使って、マウスカーソルの直下にあるウィンドウのハンドルを調べることができます。
そのハンドルが監視対象のボタンのものと一致しているかしていないかで判別できます。
但し、ループをまわす必要があります。

サンプルです。

#uselib "user32.dll" #cfunc WindowFromPoint "WindowFromPoint" int,int *LAB1 screen 0,600,300,0 objmode 1,1 objsize 100,30 NUM_BTN = 4 ;ボタンの数 dim LIST_HWND,NUM_BTN ;ボタンのウィンドウハンドルリスト repeat NUM_BTN pos 10,10+(30+50)*cnt button gosub "BTN "+cnt+"",*LAB3 LIST_HWND(cnt) = objinfo(cnt,2) ;設置したボタンのウィンドウハンドルを記録 loop font msgothic,30,16 *LAB2 repeat redraw 0 color 0,0,0 : boxf HWND_UnderMouse = WindowFromPoint(ginfo_mx,ginfo_my) ;< マウスカーソルの下に知り合いが居るかどうか調べる > OBJID_BTN_AIMED = -1 repeat NUM_BTN if HWND_UnderMouse = LIST_HWND(cnt) : OBJID_BTN_AIMED = cnt : break loop if OBJID_BTN_AIMED ! -1 {;居た場合 color 255,255,255 pos 130,10 : mes "第"+OBJID_BTN_AIMED+"ボタンが狙われています。" } redraw 1 await 100 loop stop *LAB3 dialog "第"+stat+"ボタンが押されました。" return

でも、「ループを回さずにoncmdみたいに割り込みで検出したい!」という場合も当然あるとおもいます。
ポテトさんがこちらを望んでいる場合は私の紹介した方法ではいけませんね。

そういう場合は、憶測で申し訳ないですが、
本来ならボタンに送られてくる頭上注意のメッセージをフックできれば割り込みという形で検出できるかもしれません。
私はその方面には暗いので、すみませんがこれ以上はなんとも言えません。



FunnyMaker

リンク

2013/11/20(Wed) 18:09:41|NO.58311

ちょっと補足です。

WindowFromPoint関数 はボタン以外のオブジェクトに対しても有効です。
コンボボックスやチェックボックス、入力ボックス、リストボックス.....と、ウィンドウならなんでもOKです。



ポテト(流星群)

リンク

2013/11/20(Wed) 18:34:46|NO.58312

>FunnyMakerさん
これです!出来ました。
うまいこと自分のソースに入れることが出来ました。
有難うございます。

オブジェクトならボタン以外も取得できるのですか。補足説明も有難うございます。



ポテト(流星群)

リンク

2013/11/20(Wed) 18:35:07|NO.58313

解決わすれていましたので解決と。



(’’

リンク

2013/11/20(Wed) 19:17:43|NO.58314

リピートではなくて、WM_MOUSEMOVEで処理すればいいんじゃないでしょうか?



ポテト(流星群)

リンク

2013/11/20(Wed) 20:05:04|NO.58318

>>(’’さん
なにやら新たな物を紹介してくださって有難うございます。
ちょっと見てみましたが、
取り敢えずはループ内で少し他の処理もしているので大丈夫です。
今後使うことも有るかもしれませんが。



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