「マニュアル/Tips一覧/AutoHotKey/パネルを自動的に隠す」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
- やや修正 -- 名無し (2010-01-19 01:41:55)
- やや修正 -- 名無し (2010-01-23 07:06:35)
- ナビゲータも消せるように。1辺の周辺を反応範囲にできるように。ほかやや修正。 -- 名無し (2010-04-05 09:16:30)
#comment(,disableurl)
#highlight(lisp){{
;//////////////////////////////////////////////////////////
; HkSaiパネラー
; 無保証・再配布・改変自由
;
; 動作 AutoHotKey 1.0.48.05
; 推奨 SAI 1.1.0
;
; 使用法
; 指定したパネルからカーソルが遠ざかるとパネルが隠れます。
; ひらがなカタカナキーで機能の停止・再開が切り替えできます。
;
; 2010/04/05 ウィンドウの非表示方法を、透明度を0にする方式に変更。
; 2010/01/23 HIDE/SHOWが遅いので、DLL直に変更。 ホットキー押してる時だけ表示(AllShowRealtime())追加
; 2010/01/10 修正
; 2009/12/26
; 作成
;
;-----------------------------------------------------------
; 設定
;-----------------------------------------------------------
;パネル全体指定の場合
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadLeave:=-30
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadClose:=10
;辺指定の場合
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadRectLeave:=-70
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadRectClose:=50
;マウスをチェックする間隔(ms)
TimerMiliSec:=50
;消すパネルを選ぶ 0=消さない 1=消す
;ツールパネルを消す
SW_TOOL:=1
;カラーパネルを消す
SW_COL:=1
;レイヤーパネルを消す
SW_LAY:=1
;ナビゲータを消す
SW_NAV:=1
;マウスの反応範囲
; ... 0 パネルを中心
; ... 1 ..xx
; ... 2 右辺を中心
; ... 3 ..xx
; ... 4 左辺を中心
;ツールパレット
HEN_TOOL:=0
;カラーパレット
HEN_COL:=0
;レイヤパレット
HEN_LAY:=2
;ナビゲ
HEN_NAV:=0
;-----------------------------------------------------------
;設定ここまで
;-----------------------------------------------------------
;-----------------------------------------------------------
;初期化
;-----------------------------------------------------------
#MaxThreads 1
#MaxThreadsPerHotkey 1
#SingleInstance IGNORE
#HotkeyInterval 1000 ; This is the default value (milliseconds).
#MaxHotkeysPerInterval 50 ; This is the default value.
Menu, Tray,Icon, B:\settings\icon\panel.ico
CoordMode, Mouse, Screen
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"
TA_NAV:="ナビゲータ ahk_class sfl_window_class"
;対象パネルの情報を取得
SetTitleMatchMode,3
if (SW_TOOL=1){
WinGet, temp1, ID, %TA_TOOL%
hWnd_TOOL:=temp1
TA_TOOL:="ahk_id " temp1
}
if (SW_COL=1){
WinGet, temp2, ID, %TA_COL%
hWnd_COL:=temp2
TA_COL:="ahk_id " temp2
}
if (SW_LAY=1){
WinGet, temp3, ID, %TA_LAY%
hWnd_LAY:=temp3
TA_LAY:="ahk_id " temp3
}
if (SW_NAV=1){
WinGet, temp3, ID, %TA_NAV%
hWnd_NAV:=temp3
TA_NAV:="ahk_id " temp3
}
SetTitleMatchMode,1
;終了時
OnExit, ExitSub
;
MsgBox, 4160, , OKを押すとHkSaiパネラー動作開始します
;タイマー
SetTimer, MouseCheck, %TimerMiliSec%
return
;-------------------------------------------------------------
;以下ルーチン
;-----------------------------------------------------------
ShowWindow(switch,TA)
;-----------------------------------------------------------
;ウィンドウの表示/非表示を切替
; switch … 0=Hide 1=Show
;-----------------------------------------------------------
{
if(switch=0){
WinSet, Trans, 0, ahk_id %TA%
}
if(switch=1){
WinSet, Trans, 255, ahk_id %TA%
}
return
}
AllShow()
;-----------------------------------------------------------
; 基本機能のオンオフ切替
;-----------------------------------------------------------
{
global hWnd_TOOL,hWnd_COL,hWnd_LAY,hWnd_NAV
global ForceToShow
if(ForceToShow=0){
SetTimer, MouseCheck, Off
ShowWindow(1,hWnd_TOOL)
ShowWindow(1,hWnd_COL)
ShowWindow(1,hWnd_LAY)
ShowWindow(1,hWnd_NAV)
ForceToShow:=1
return
}
if(ForceToShow=1){
SetTimer, MouseCheck, On
ForceToShow:=0
return
}
return
}
AllShowRealtime()
;-----------------------------------------------------------
; 基本機能のオンオフ切替 (押してる間だけ)
;-----------------------------------------------------------
{
global hWnd_TOOL,hWnd_COL,hWnd_LAY,hWnd_NAV
global ForceToShow
;機能停止
SetTimer, MouseCheck, Off
ShowWindow(1,hWnd_TOOL)
ShowWindow(1,hWnd_COL)
ShowWindow(1,hWnd_LAY)
ShowWindow(1,hWnd_NAV)
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,SW_NAV
global hWnd_TOOL,hWnd_COL,hWnd_LAY,hWnd_NAV
if SW_TOOL=1
ShowWindow(0,hWnd_TOOL)
if SW_COL=1
ShowWindow(0,hWnd_COL)
if SW_LAY=1
ShowWindow(0,hWnd_LAY)
if SW_NAV=1
ShowWindow(0,hWnd_NAV)
return
}
IsHit(X,Y,XL,YU,XR,YB,IsPanelVisible,Rect)
;-----------------------------------------------------------
; 二つの矩形の当たり判定を行う
; X,Y … マウス位置
; XL,YU,XR,YB … 矩形2
; IsPanelVisible… パネルが表示されてるかどうか
; Rect ... 0 無指定
; ... 1 上辺..未実装(ごめんネ!)
; ... 2 右辺
; ... 3 下辺..未実装(ごめんネ!)
; ... 4 左辺
;-----------------------------------------------------------
{
global PadLeave,PadClose,PadRectLeave,PadRectClose
;パネルがある時(パネルから離れるとき)
if(IsPanelVisible){
;tooltip, IsPanelVisible %IsPanelVisible% %Pad%
;左辺
if (Rect=4){
if( (XL + PadRectLeave < X ) && (X < XR - PadRectLeave ) && (YU + PadRectLeave < Y ) && (Y < YB - PadRectLeave ) )
return true
}
;右辺
if (Rect=2){
if( (XL + PadRectLeave < X ) && (X < XR - PadRectLeave ) && ( YU + PadRectLeave < Y ) && (Y < YB - PadRectLeave ) )
return true
}
;無指定(中心)
if (Rect=0){
if( ( XL + PadLeave < X ) && ( X < XR - PadLeave ) && ( YU + PadLeave < Y ) && ( Y < YB - PadLeave ) )
return true
}
}
;パネルがない時(パネルに近づくとき)
if(IsPanelVisible=0){
;tooltip, IsPanelVisible %IsPanelVisible% %Pad%
;左辺
if (Rect=4){
if( ( XL < X ) && ( X < XL + PadRectClose ) && ( YU < Y ) && ( Y < YB ) )
return true
}
;右辺
if (Rect=2){
if( ( XR - PadRectClose < X ) && ( X < XR ) && ( YU < Y ) && ( Y < YB ) )
return true
}
;無指定(中心)
if (Rect=0){
if( ( XL + PadClose < X ) && ( X < XR - PadClose ) && ( YU + PadClose < Y ) && (Y < YB - PadClose ) )
return true
}
}
return false
}
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){
;// ツール //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_TOOL%
WinGetPos, X1, Y1, W, H, %TA_TOOL%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_TOOL)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_TOOL)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_TOOL)
;////////////////////////
}
if (SW_COL=1){
;// カラー //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_COL%
WinGetPos, X1, Y1, W, H, %TA_COL%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_COL)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_COL)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_COL)
;////////////////////////
}
if (SW_LAY=1){
;// レイヤー //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_LAY%
WinGetPos, X1, Y1, W, H, %TA_LAY%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_LAY)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_LAY)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_LAY)
;////////////////////////
}
if (SW_NAV=1){
;// ナビゲータ //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_NAV%
WinGetPos, X1, Y1, W, H, %TA_NAV%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_NAV)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_NAV)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_NAV)
;////////////////////////
}
;tooltip hey apple!
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)
if SW_NAV=1
ShowWindow(1,hWnd_NAV)
exitapp
;-----------------------------------------------------------
;-----------------------------------------------------------
#IfWinActive, SAI ahk_class sfl_window_class
vkF2sc070::AllShow() ;ひらがなカタカナキーvkF2sc070:
Joy1::AllShowRealtime()
;-----------------------------------------------------------
#IfWinActive
~^F12::Reload
}}
- やや修正 -- 名無し (2010-01-19 01:41:55)
- やや修正 -- 名無し (2010-01-23 07:06:35)
- ナビゲータも消せるように。1辺の周辺を反応範囲にできるように。ほかやや修正。 -- 名無し (2010-04-05 09:16:30)
コメントは1つ上の階層へどうぞ。
#highlight(lisp){{
;//////////////////////////////////////////////////////////
; HkSaiパネラー
; 無保証・再配布・改変自由
;
; 動作 AutoHotKey 1.0.48.05
; 推奨 SAI 1.1.0
;
; 使用法
; 指定したパネルからカーソルが遠ざかるとパネルが隠れます。
; ひらがなカタカナキーで機能の停止・再開が切り替えできます。
;
; 2010/04/05 ウィンドウの非表示方法を、透明度を0にする方式に変更。
; 2010/01/23 HIDE/SHOWが遅いので、DLL直に変更。 ホットキー押してる時だけ表示(AllShowRealtime())追加
; 2010/01/10 修正
; 2009/12/26
; 作成
;
;-----------------------------------------------------------
; 設定
;-----------------------------------------------------------
;パネル全体指定の場合
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadLeave:=-30
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadClose:=10
;辺指定の場合
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadRectLeave:=-70
; この数が多いほど、検出範囲は実際のウィンドウサイズより内側になる。
PadRectClose:=50
;マウスをチェックする間隔(ms)
TimerMiliSec:=50
;消すパネルを選ぶ 0=消さない 1=消す
;ツールパネルを消す
SW_TOOL:=1
;カラーパネルを消す
SW_COL:=1
;レイヤーパネルを消す
SW_LAY:=1
;ナビゲータを消す
SW_NAV:=1
;マウスの反応範囲
; ... 0 パネルを中心
; ... 1 ..xx
; ... 2 右辺を中心
; ... 3 ..xx
; ... 4 左辺を中心
;ツールパレット
HEN_TOOL:=0
;カラーパレット
HEN_COL:=0
;レイヤパレット
HEN_LAY:=2
;ナビゲ
HEN_NAV:=0
;-----------------------------------------------------------
;設定ここまで
;-----------------------------------------------------------
;-----------------------------------------------------------
;初期化
;-----------------------------------------------------------
#MaxThreads 1
#MaxThreadsPerHotkey 1
#SingleInstance IGNORE
#HotkeyInterval 1000 ; This is the default value (milliseconds).
#MaxHotkeysPerInterval 50 ; This is the default value.
Menu, Tray,Icon, B:\settings\icon\panel.ico
CoordMode, Mouse, Screen
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"
TA_NAV:="ナビゲータ ahk_class sfl_window_class"
;対象パネルの情報を取得
SetTitleMatchMode,3
if (SW_TOOL=1){
WinGet, temp1, ID, %TA_TOOL%
hWnd_TOOL:=temp1
TA_TOOL:="ahk_id " temp1
}
if (SW_COL=1){
WinGet, temp2, ID, %TA_COL%
hWnd_COL:=temp2
TA_COL:="ahk_id " temp2
}
if (SW_LAY=1){
WinGet, temp3, ID, %TA_LAY%
hWnd_LAY:=temp3
TA_LAY:="ahk_id " temp3
}
if (SW_NAV=1){
WinGet, temp3, ID, %TA_NAV%
hWnd_NAV:=temp3
TA_NAV:="ahk_id " temp3
}
SetTitleMatchMode,1
;終了時
OnExit, ExitSub
;
MsgBox, 4160, , OKを押すとHkSaiパネラー動作開始します
;タイマー
SetTimer, MouseCheck, %TimerMiliSec%
return
;-------------------------------------------------------------
;以下ルーチン
;-----------------------------------------------------------
ShowWindow(switch,TA)
;-----------------------------------------------------------
;ウィンドウの表示/非表示を切替
; switch … 0=Hide 1=Show
;-----------------------------------------------------------
{
if(switch=0){
WinSet, Trans, 0, ahk_id %TA%
}
if(switch=1){
WinSet, Trans, 255, ahk_id %TA%
}
return
}
AllShow()
;-----------------------------------------------------------
; 基本機能のオンオフ切替
;-----------------------------------------------------------
{
global hWnd_TOOL,hWnd_COL,hWnd_LAY,hWnd_NAV
global ForceToShow
if(ForceToShow=0){
SetTimer, MouseCheck, Off
ShowWindow(1,hWnd_TOOL)
ShowWindow(1,hWnd_COL)
ShowWindow(1,hWnd_LAY)
ShowWindow(1,hWnd_NAV)
ForceToShow:=1
return
}
if(ForceToShow=1){
SetTimer, MouseCheck, On
ForceToShow:=0
return
}
return
}
AllShowRealtime()
;-----------------------------------------------------------
; 基本機能のオンオフ切替 (押してる間だけ)
;-----------------------------------------------------------
{
global hWnd_TOOL,hWnd_COL,hWnd_LAY,hWnd_NAV
global ForceToShow
;機能停止
SetTimer, MouseCheck, Off
ShowWindow(1,hWnd_TOOL)
ShowWindow(1,hWnd_COL)
ShowWindow(1,hWnd_LAY)
ShowWindow(1,hWnd_NAV)
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,SW_NAV
global hWnd_TOOL,hWnd_COL,hWnd_LAY,hWnd_NAV
if SW_TOOL=1
ShowWindow(0,hWnd_TOOL)
if SW_COL=1
ShowWindow(0,hWnd_COL)
if SW_LAY=1
ShowWindow(0,hWnd_LAY)
if SW_NAV=1
ShowWindow(0,hWnd_NAV)
return
}
IsHit(X,Y,XL,YU,XR,YB,IsPanelVisible,Rect)
;-----------------------------------------------------------
; 二つの矩形の当たり判定を行う
; X,Y … マウス位置
; XL,YU,XR,YB … 矩形2
; IsPanelVisible… パネルが表示されてるかどうか
; Rect ... 0 無指定
; ... 1 上辺..未実装(ごめんネ!)
; ... 2 右辺
; ... 3 下辺..未実装(ごめんネ!)
; ... 4 左辺
;-----------------------------------------------------------
{
global PadLeave,PadClose,PadRectLeave,PadRectClose
;パネルがある時(パネルから離れるとき)
if(IsPanelVisible){
;tooltip, IsPanelVisible %IsPanelVisible% %Pad%
;左辺
if (Rect=4){
if( (XL + PadRectLeave < X ) && (X < XR - PadRectLeave ) && (YU + PadRectLeave < Y ) && (Y < YB - PadRectLeave ) )
return true
}
;右辺
if (Rect=2){
if( (XL + PadRectLeave < X ) && (X < XR - PadRectLeave ) && ( YU + PadRectLeave < Y ) && (Y < YB - PadRectLeave ) )
return true
}
;無指定(中心)
if (Rect=0){
if( ( XL + PadLeave < X ) && ( X < XR - PadLeave ) && ( YU + PadLeave < Y ) && ( Y < YB - PadLeave ) )
return true
}
}
;パネルがない時(パネルに近づくとき)
if(IsPanelVisible=0){
;tooltip, IsPanelVisible %IsPanelVisible% %Pad%
;左辺
if (Rect=4){
if( ( XL < X ) && ( X < XL + PadRectClose ) && ( YU < Y ) && ( Y < YB ) )
return true
}
;右辺
if (Rect=2){
if( ( XR - PadRectClose < X ) && ( X < XR ) && ( YU < Y ) && ( Y < YB ) )
return true
}
;無指定(中心)
if (Rect=0){
if( ( XL + PadClose < X ) && ( X < XR - PadClose ) && ( YU + PadClose < Y ) && (Y < YB - PadClose ) )
return true
}
}
return false
}
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){
;// ツール //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_TOOL%
WinGetPos, X1, Y1, W, H, %TA_TOOL%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_TOOL)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_TOOL)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_TOOL)
;////////////////////////
}
if (SW_COL=1){
;// カラー //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_COL%
WinGetPos, X1, Y1, W, H, %TA_COL%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_COL)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_COL)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_COL)
;////////////////////////
}
if (SW_LAY=1){
;// レイヤー //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_LAY%
WinGetPos, X1, Y1, W, H, %TA_LAY%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_LAY)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_LAY)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_LAY)
;////////////////////////
}
if (SW_NAV=1){
;// ナビゲータ //////////////////////
;ウィンドウある?
WinGet, IsPanelVisible , Transparent, ahk_id %hWnd_NAV%
WinGetPos, X1, Y1, W, H, %TA_NAV%
hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN_NAV)
;出す
if (hit=1 && !IsPanelVisible)
ShowWindow(1,hWnd_NAV)
;消す
if (hit=0 && IsPanelVisible && ForceToShow=0)
ShowWindow(0,hWnd_NAV)
;////////////////////////
}
;tooltip hey apple!
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)
if SW_NAV=1
ShowWindow(1,hWnd_NAV)
exitapp
;-----------------------------------------------------------
;-----------------------------------------------------------
#IfWinActive, SAI ahk_class sfl_window_class
vkF2sc070::AllShow() ;ひらがなカタカナキーvkF2sc070:
Joy1::AllShowRealtime()
;-----------------------------------------------------------
#IfWinActive
~^F12::Reload
}}