ボタンもウィンドウなのを利用して、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