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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1229
ケーナボタンにマウスオーバーした時、説明を出したい1未解決


ケーナ

リンク

2013/12/29(Sun) 05:25:28|NO.58960

oncmd 0x200
でマウス移動イベントを取得しているのですが、
肝心のボタンの上にマウスが乗っている間は命令が処理されません。
マウス座標内にカーソルがあることを調べて説明を表示しているnodesuga,
ボタンの上にカーソルが乗る、もしくは離れる瞬間にだけ反応します。
TIMERなどを使うしかないのでしょうか?



この記事に返信する


MillkeyStars

リンク

2013/12/29(Sun) 08:12:21|NO.58964

ボタンもウィンドウなのを利用して、WM_MOUSELEAVE でボタン上にカーソルが来たのを検出すればいいのでは?

WINAPI USER32 の TrackMouseEvent を使えば、ウィンドウのクライアント領域から出た場合、
WM_MOUSELEAVE が発行されるわけだから、それを使って、現在のカーソルがボタン上なのか、HSPウィンドウ上から出たのか
判断すれば、正しくボタン上の判定ができると思う。

下記参考スクリプト

#uselib "user32" #func global TrackMouseEvent "TrackMouseEvent" sptr #func global GetWindowInfo "GetWindowInfo" sptr,sptr #const WM_MOUSEMOVE 0x0200 #const WM_MOUSELEAVE 0x02A3 #const TME_LEAVE 0x00000002 oncmd gosub *MOUSEMOVE,WM_MOUSEMOVE oncmd gosub *MOUSELEAVE,WM_MOUSELEAVE objsize 50,50 pos 100,100 : button gosub "ボタン",*TEST stop *TEST return *MOUSEMOVE if FLAG = 0{ dim prm,4 prm(0) = 16,TME_LEAVE,hwnd TrackMouseEvent varptr(prm) FLAG = 1 } return *MOUSELEAVE dim WINDOWINFO,15 GetWindowInfo hwnd,varptr(WINDOWINFO) if (ginfo(0) >= WINDOWINFO(5))&(ginfo(1) >= WINDOWINFO(6))&(ginfo(0) < WINDOWINFO(7))&(ginfo(1) < WINDOWINFO(8)){ dialog "ウィンドウ範囲内ボタン上" } FLAG = 0 return

というか、いい加減オブジェクトのウィンドウプロシージャも oncmd などで扱えるようにしてほしいw



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