「マニュアル/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/09/19 透明度の取得が不安定なのでScript側で管理する方式に変更。
; 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:= 0
;カラーパネルを消す
SW_COL:= 1
;レイヤーパネルを消す
SW_LAY:= 1
;ナビゲータを消す
SW_NAV:= 1
;マウスの反応範囲
; ... 0 パネルを中心
; ... 1 ..xx
; ... 2 右辺を中心
; ... 3 ..xx
; ... 4 左辺を中心
;ツールパレット
HEN_TOOL:= 0
;カラーパレット
HEN_COL:= 0
;レイヤパレット
HEN_LAY:= 0
;ナビゲ
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, .\panel.ico
CoordMode, Mouse, Screen
ForceToShow:=0
IsPanelVisible:=1
VISIBLE:=255
INVISIBLE:=0
;透過値管理
aTOL:=""
aCOL:=""
aLAY:=""
aNAV:=""
;パネル検索用データ
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
;-----------------------------------------------------------
{
global VISIBLE,INVISIBLE
;tooltip %TA%
a:=""
if(switch=0){
WinSet, Trans, %INVISIBLE%, %TA%
a:=INVISIBLE
}
if(switch=1){
WinSet, Trans, %VISIBLE%, %TA%
a:=VISIBLE
}
return a
}
AllShow()
;-----------------------------------------------------------
; 基本機能のオンオフ切替
;-----------------------------------------------------------
{
global TA_TOOL,TA_COL,TA_LAY,TA_NAV
global ForceToShow
global aTOL,aCOL,aLAY,aNAV
if(ForceToShow=0){
SetTimer, MouseCheck, Off
aTOL:=ShowWindow(1,TA_TOOL)
aCOL:=ShowWindow(1,TA_COL)
aLAY:=ShowWindow(1,TA_LAY)
aNAV:=ShowWindow(1,TA_NAV)
ForceToShow:=1
return
}
if(ForceToShow=1){
SetTimer, MouseCheck, On
ForceToShow:=0
return
}
return
}
AllShowRealtime()
;-----------------------------------------------------------
; 基本機能のオンオフ切替 (押してる間だけ)
;-----------------------------------------------------------
{
PushThishotkey=%A_Thishotkey%
global TA_TOOL,TA_COL,TA_LAY,TA_NAV
global ForceToShow
global aTOL,aCOL,aLAY,aNAV
;機能停止
SetTimer, MouseCheck, Off
aTOL:=ShowWindow(1,TA_TOOL)
aCOL:=ShowWindow(1,TA_COL)
aLAY:=ShowWindow(1,TA_LAY)
aNAV:=ShowWindow(1,TA_NAV)
ForceToShow:=1
;待ち
UpKeyAlert:=0
loop{
sleep,100
GetKeyState, Stat, %PushThishotkey%
If (Stat="U"){
break
}
;sleep,5000
}
;機能再開
SetTimer, MouseCheck, On
ForceToShow:=0
return
}
AllHide()
;-----------------------------------------------------------
; すべてのパネルを隠す
;-----------------------------------------------------------
{
global SW_TOOL,SW_COL,SW_LAY,SW_NAV
global TA_TOOL,TA_COL,TA_LAY,TA_NAV
global aTOL,aCOL,aLAY,aNAV
if SW_TOOL=1
aTOL:=ShowWindow(0,TA_TOOL)
if SW_COL=1
aCOL:=ShowWindow(0,TA_COL)
if SW_LAY=1
aLAY:=ShowWindow(0,TA_LAY)
if SW_NAV=1
aNAV:=ShowWindow(0,TA_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
global VISIBLE,INVISIBLE
hit:=0
;初回処理
if(IsPanelVisible=""){
t:="初回"
}
;パネルがない時(パネルに近づくとき)
if(IsPanelVisible=INVISIBLE){
t:="近"
;左辺
if (Rect=4){
if( ( XL < X ) && ( X < XL + PadRectClose ) && ( YU < Y ) && ( Y < YB ) ){
hit:=1
}
}
;右辺
if (Rect=2){
if( ( XR - PadRectClose < X ) && ( X < XR ) && ( YU < Y ) && ( Y < YB ) ){
hit:=1
}
}
;無指定(中心)
if (Rect=0){
if( ( XL + PadClose < X ) && ( X < XR - PadClose ) && ( YU + PadClose < Y ) && (Y < YB - PadClose ) ){
hit:=1
}
}
}
;パネルがある時(パネルから離れるとき)
if(IsPanelVisible=VISIBLE){
t:="離"
/*
;左辺
if (Rect=4){
;if( ( XL + PadRectLeave < X ) && ( X < XR - PadRectLeave ) && ( YU + PadRectLeave < Y ) && ( Y < YB - PadRectLeave ) ){
if( ( XL + PadLeave < X ) && ( X < XR - PadLeave ) && ( YU + PadLeave < Y ) && ( Y < YB - PadLeave ) ){
hit:=1
;return true
}
}
;右辺
if (Rect=2){
;if( ( XL + PadRectLeave < X ) && ( X < XR - PadRectLeave ) && ( YU + PadRectLeave < Y ) && ( Y < YB - PadRectLeave ) ){
if( ( XL + PadLeave < X ) && ( X < XR - PadLeave ) && ( YU + PadLeave < Y ) && ( Y < YB - PadLeave ) ){
hit:=1
;return true
}
}
;無指定(中心)
if (Rect=0){
if( ( XL + PadLeave < X ) && ( X < XR - PadLeave ) && ( YU + PadLeave < Y ) && ( Y < YB - PadLeave ) ){
hit:=1
;return true
}
}
*/
if( ( XL + PadLeave < X ) && ( X < XR - PadLeave ) && ( YU + PadLeave < Y ) && ( Y < YB - PadLeave ) ){
hit:=1
}
}
;tooltip, hit=%hit% t=%t% X=%X% Y=%Y% XL=%XL% YU=%YU% XR=%XR% YB=%YB% IsPanelVisible=%IsPanelVisible% Rect=%Rect%
if (hit=1){
return true
} else {
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
;global aTOL,aCOL,aLAY,aNAV
if (SW_TOOL=1){
;// ツール //////////////////////
;ウィンドウある?
;WinGet, IsPanelVisible , Transparent, %TA_TOOL%]
IsPanelVisible:=aTOL
;消す2(起動したてのときなど)
if (IsPanelVisible=""){
aTOL:=ShowWindow(0,TA_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=INVISIBLE)
aTOL:=ShowWindow(1,TA_TOOL)
;消す
if (hit=0 && IsPanelVisible=VISIBLE && ForceToShow=0)
aTOL:=ShowWindow(0,TA_TOOL)
;////////////////////////
}
if (SW_COL=1){
;// カラー //////////////////////
;ウィンドウある?
IsPanelVisible:=aCOL
;消す2(起動したてのときなど)
if (IsPanelVisible=""){
aCOL:=ShowWindow(0,TA_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=INVISIBLE)
aCOL:=ShowWindow(1,TA_COL)
;消す
if (hit=0 && IsPanelVisible=VISIBLE && ForceToShow=0)
aCOL:=ShowWindow(0,TA_COL)
;////////////////////////
}
if (SW_LAY=1){
;// レイヤー //////////////////////
;ウィンドウある?
IsPanelVisible:=aLAY
;消す2(起動したてのときなど)
if (IsPanelVisible=""){
aLAY:=ShowWindow(0,TA_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=INVISIBLE)
aLAY:=ShowWindow(1,TA_LAY)
;消す
if (hit=0 && IsPanelVisible=VISIBLE && ForceToShow=0)
aLAY:=ShowWindow(0,TA_LAY)
;////////////////////////
}
if (SW_NAV=1){
;// ナビゲータ //////////////////////
;ウィンドウある?
IsPanelVisible:=aNAV
;消す2(起動したてのときなど)
if (IsPanelVisible=""){
aNAV:=ShowWindow(0,TA_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=INVISIBLE)
aNAV:=ShowWindow(1,TA_NAV)
;消す
if (hit=0 && IsPanelVisible=VISIBLE && ForceToShow=0)
aNAV:=ShowWindow(0,TA_NAV)
;////////////////////////
}
return
ExitSub:
;-----------------------------------------------------------
;終了処理
;-----------------------------------------------------------
SetTimer, MouseCheck, Off
if SW_TOOL=1
aTOL:=ShowWindow(1,TA_TOOL)
if SW_COL=1
ShowWindow(1,TA_COL)
if SW_LAY=1
ShowWindow(1,TA_LAY)
if SW_NAV=1
ShowWindow(1,TA_NAV)
exitapp
;-----------------------------------------------------------
;-----------------------------------------------------------
#IfWinActive, SAI ahk_class sfl_window_class
;vkF2sc070::AllShow() ;ひらがなカタカナキーvkF2sc070:
vkF2sc070::AllShowRealtime() ;ひらがなカタカナキーvkF2sc070:
;ボタン割り当て時
numpad5::AllShowRealtime()
;-----------------------------------------------------------
#IfWinActive
~^F12::Reload
}}
このページでの公開は終了しました。→→[[こちら参照>http://www3.atwiki.jp/sai/pages/219.html]]