「マニュアル/Tips一覧/AutoHotKey/パネルを自動的に隠す」の編集履歴(バックアップ)一覧に戻る
;//////////////////////////////////////////////////////////
; HkSaiパネラー
; 無保証・再配布・改変自由
;
; 動作 AutoHotKey 1.0.48.05
; 推奨 SAI 1.1.0
;
; 使用法
; 指定したパネルからカーソルが遠ざかるとパネルが隠れます。
; ひらがなカタカナキーで機能の停止・再開が切り替えできます。
;
; 2010/01/23 HIDE/SHOWが遅いので、DLL直に変更。 ホットキー押してる時だけ表示(AllShowRealtime())追加
; 2010/01/10 修正
; 2009/12/26
; 作成
;
;-----------------------------------------------------------
; 設定
;-----------------------------------------------------------
; Leave値を超えてカーソルが離れるとパネルを隠す
; Close値を超えてカーソルが近づくとパネルを表示
;通常矩形モード(パネルと同じ領域を当たり判定に利用。)
PadLeave:=+30
PadClose:=-10
;Rect指定モード(上下左右いずれかの辺を利用。)(現在レイヤパレットのみ)
PadRectLeave:=+70
PadRectClose:=-40
;マウスをチェックする間隔(ms)
TimerMiliSec:=50
; ツールパネルを消す
SW_TOOL:=1
; カラーパネルを消す
SW_COL:=1
;レイヤーパネルを消す
SW_LAY:=1
;-----------------------------------------------------------
;設定ここまで
;-----------------------------------------------------------
#MaxThreads 5
#MaxThreadsPerHotkey 1
#HotkeyInterval 1000 ; This is the default value (milliseconds).
#MaxHotkeysPerInterval 50 ; This is the default value.
;-----------------------------------------------------------
ShowWindow(switch,TA)
;-----------------------------------------------------------
;ウィンドウの表示/非表示を切替
; switch … 0=Hide 1=Show
;-----------------------------------------------------------
{
if(switch=0){
DllCall("ShowWindow" , "UInt",TA, "Uint",0) ;0=SW_HIDE
}
if(switch=1){
DllCall("ShowWindow" , "UInt",TA, "Uint",5) ;5=SW_SHOW
}
return
}
AllShow()
;-----------------------------------------------------------
; 基本機能のオンオフ切替
;-----------------------------------------------------------
{
global hWnd_TOOL,hWnd_COL,hWnd_LAY,ForceToShow
if(ForceToShow=0){
SetTimer, MouseCheck, Off
ShowWindow(1,hWnd_TOOL)
ShowWindow(1,hWnd_COL)
ShowWindow(1,hWnd_LAY)
ForceToShow:=1
return
}
if(ForceToShow=1){
SetTimer, MouseCheck, On
ForceToShow:=0
return
}
return
}
AllShowRealtime()
;-----------------------------------------------------------
; 基本機能のオンオフ切替 (押してる間だけ)
;-----------------------------------------------------------
{
global hWnd_TOOL,hWnd_COL,hWnd_LAY,ForceToShow
;機能停止
SetTimer, MouseCheck, Off
ShowWindow(1,hWnd_TOOL)
ShowWindow(1,hWnd_COL)
ShowWindow(1,hWnd_LAY)
ForceToShow:=1
;待ち
loop{
GetKeyState, Joy1Stat, Joy1
If (Joy1Stat="U")
break
sleep,50
}
;機能再開
SetTimer, MouseCheck, On
ForceToShow:=0
return
}
AllHide()
;-----------------------------------------------------------
; すべてのパネルを隠す
;-----------------------------------------------------------
{
global SW_TOOL,SW_COL,SW_LAY,hWnd_TOOL,hWnd_COL,hWnd_LAY
if SW_TOOL=1
ShowWindow(0,hWnd_TOOL)
if SW_COL=1
ShowWindow(0,hWnd_COL)
if SW_LAY=1
ShowWindow(0,hWnd_LAY)
return
}
IsHit(X0,Y0,X1,Y1,X2,Y2,X3,Y3,IsPanelVisible,Rect)
;-----------------------------------------------------------
; 二つの矩形の当たり判定を行う
; X0,Y0,X1,Y1 … 矩形1
; X2,Y2,X3,Y3 … 矩形2
; IsPanelVisible… パネルが表示されてるかどうか
; Rect 上下左右いずれか一辺の領域をhit領域にするフラグ
; ※現在レイヤパレットのみ実装
; ... 0 無指定(通常矩形)
; ... 1 x...未実装(ごめんネ!)
; ... 2 右辺に格納
; ... 3 x...未実装(ごめんネ!)
; ... 4 x...未実装(ごめんネ!)
;-----------------------------------------------------------
{
global PadLeave,PadClose,PadRectLeave,PadRectClose
;パネルがある時(パネルから離れるとき)
if(IsPanelVisible){
;tooltip, IsPanelVisible %IsPanelVisible% %Pad%
if (Rect=2){
if( (X0 < X3+PadRectLeave) && (X2-PadRectLeave < X1) && (Y0 < Y3+PadRectLeave) && (Y2-PadRectLeave < Y1))
return true
}
if (Rect=0){
if( (X0 < X3+PadLeave) && (X2-PadLeave < X1) && (Y0 < Y3+PadLeave) && (Y2-PadLeave < Y1))
return true
}
}
;パネルがない時(パネルに近づくとき)
if(IsPanelVisible=0){
;tooltip, IsPanelVisible %IsPanelVisible% %Pad%
if (Rect=2){
if( (X0 < (X3-PadRectClose)) && (X2+(X3-X2)+PadRectClose < X1) && (Y0 < Y3) && (Y2 < Y1))
return true
}
if (Rect=0){
if( (X0 < X3+PadClose) && (X2-PadClose < X1) && (Y0 < Y3+PadClose) && (Y2-PadClose < Y1))
return true
}
}
return false
}
;-----------------------------------------------------------
;初期化
;-----------------------------------------------------------
ForceToShow:=0
IsPanelVisible:=1
TA_TOOL:="ツール ahk_class sfl_window_class"
TA_COL:="カラー ahk_class sfl_window_class"
TA_LAY:="レイヤー ahk_class sfl_window_class"
CoordMode,Mouse,Screen
SetTitleMatchMode,3
if (SW_TOOL=1){
WinGet, temp1, ID, %TA_TOOL%
hWnd_TOOL:=temp1
TA_TOOL:="ahk_id " temp1
WinGetPos, ToolX, ToolY, ToolW, ToolH, %TA_TOOL%
}
if (SW_COL=1){
WinGet, temp2, ID, %TA_COL%
hWnd_COL:=temp2
TA_COL:="ahk_id " temp2
WinGetPos, ColX, ColY, ColW, ColH, %TA_COL%
}
if (SW_LAY=1){
WinGet, temp3, ID, %TA_LAY%
hWnd_LAY:=temp3
TA_LAY:="ahk_id " temp3
WinGetPos, LayX, LayY, LayW, LayH, %TA_LAY%
}
SetTitleMatchMode,1
;終了時
OnExit, ExitSub
;タイマー
SetTimer, MouseCheck, %TimerMiliSec%
return
MouseCheck:
;-----------------------------------------------------------
;メイン
;-----------------------------------------------------------
If !WinActive("ahk_class sfl_window_class"){
AllHide()
return
}
loop{
LButtonStat:=GetKeyState("LButton")
If (LButtonStat=0)
break
sleep,100
}
MouseGetPos, X , Y
if (SW_TOOL=1){
;// ツール //////////////////////
;ウィンドウある?
IsPanelVisible:=WinExist(TA_TOOL)
if IsPanelVisible
WinGetPos, ToolX, ToolY, ToolW, ToolH, %TA_TOOL%
hit:=IsHit(X,Y,X,Y, ToolX,ToolY,ToolX+ToolW,ToolY+ToolH,IsPanelVisible,0)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_TOOL)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_TOOL)
;////////////////////////
}
if (SW_COL=1){
;// カラー //////////////////////
;ウィンドウある?
IsPanelVisible:=WinExist(TA_COL)
if IsPanelVisible
WinGetPos, ColX, ColY, ColW, ColH, %TA_COL%
hit:=IsHit(X,Y,X,Y, ColX,ColY,ColX+ColW,ColY+ColH,IsPanelVisible,0)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_COL)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_COL)
;////////////////////////
}
if (SW_LAY=1){
;// レイヤー //////////////////////
;ウィンドウある?
IsPanelVisible:=WinExist(TA_LAY)
if IsPanelVisible
WinGetPos, LayX, LayY, LayW, LayH, %TA_LAY%
hit:=IsHit(X,Y,X,Y, LayX,LayY,LayX+LayW,LayY+LayH,IsPanelVisible,2)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_LAY)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_LAY)
;////////////////////////
}
return
ExitSub:
;-----------------------------------------------------------
;終了処理
;-----------------------------------------------------------
SetTimer, MouseCheck, Off
if SW_TOOL=1
ShowWindow(1,hWnd_TOOL)
if SW_COL=1
ShowWindow(1,hWnd_COL)
if SW_LAY=1
ShowWindow(1,hWnd_LAY)
exitapp ; テスト用
;-----------------------------------------------------------
;-----------------------------------------------------------
#IfWinActive, SAI ahk_class sfl_window_class
vkF2sc070::AllShow() ;ひらがなカタカナキーvkF2sc070:
Joy1::AllShowRealtime()
;-----------------------------------------------------------
#IfWinActive