マニュアル > Tips一覧 > AutoHotKey > パネルを自動的に隠す

「マニュアル/Tips一覧/AutoHotKey/パネルを自動的に隠す」の編集履歴(バックアップ)一覧はこちら

マニュアル/Tips一覧/AutoHotKey/パネルを自動的に隠す」(2010/12/14 (火) 01:39:25) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

- やや修正 -- 名無し (2010-01-19 01:41:55) - やや修正 -- 名無し (2010-01-23 07:06:35) - ナビゲータも消せるように。1辺の周辺を反応範囲にできるように。ほかやや修正。 -- 名無し (2010-04-05 09:16:30) - 透明度の取得が不安定なのでScript側で管理する方式に変更。 -- 名無し (2010-09-19 10:38:40) - ツールバーを消すときに選択色を小窓で出すようにした。PadRectLeave廃止。ハンドル取得廃止。 -- 名無し (2010-09-19 23:55:58) - 小窓をSAI準拠の形式に変更。内部整理。 -- 名無し (2010-09-20 07:43:09) - 「レイヤー名の変更」ダイアログも消えちゃう問題を解消。 -- 名無し (2010-11-03 13:53:53) #comment(,disableurl) #highlight(lisp){{ ;////////////////////////////////////////////////////////// ; HkSaiパネラー ; 無保証・再配布・改変自由 ; ; 動作 AutoHotKey 1.0.48.05 ; 推奨 SAI 1.1.0 ; ; 使用法 ;  まず、SAIのiniをいじって、パネルを独立ウィンドウ表示にしてください。 ;  指定したパネルからカーソルが遠ざかるとパネルが隠れます。 ;  ひらがなカタカナキーで機能の停止・再開が切り替えできます。 ; ; 2010/09/20 小窓をSAI準拠の形式に変更。内部整理。 ; 2010/09/19 ツールバーを消すときに選択色を小窓で出すようにした。PadRectLeave廃止。ハンドル取得廃止。 ; 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:= 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:= 0 ;ナビゲ HEN_NAV:= 0 ;----------------------------------------------------------- ;設定ここまで ;----------------------------------------------------------- ;----------------------------------------------------------- ;初期化 ;----------------------------------------------------------- ;非透過 VISIBLE:=255 ;透過 INVISIBLE:=0 ;モード ForceToShow:=0 firstDetect:=1 ;処理部で使いまわす変数 IsPanelVisible:=1 ;透過値管理 aTOL:=VISIBLE aCOL:=VISIBLE aLAY:=VISIBLE aNAV:=VISIBLE ;パネル検索用データ 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" ;----------------------------------------------------------- ; 初期処理 ;----------------------------------------------------------- #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 ;ウィンドウ指定を完全一致に SetTitleMatchMode,3 ;終了時 OnExit, ExitSub ;タイマー SetTimer, MouseCheck, %TimerMiliSec% ;----------------------------------------------------------- ; GUI初期化 ;----------------------------------------------------------- if ( SW_TOOL= 1){ ;親(外枠) pS:=44 Gui, 7: Margin, 0, 0 Gui, 7: -Border +ToolWindow +AlwaysOnTop -Caption -HScroll -VScroll GUI, 7: Color, 888888 ;Gui, 7: Show, x640 y480 w%pS% h%pS% Gui, 7: +LastFound Parent_Handle :=WinExist() ;子(内枠) cO:=1 cS:=pS-2 Gui, 8: Margin, 0, 0 Gui, 8: -Border +ToolWindow +AlwaysOnTop -Caption -HScroll -VScroll Gui, 8: Show, x%cO% y%cO% w%cS% h%cS% GUI, 8: Color, FFFFFF Gui, 8: +LastFound Child_Handle :=WinExist() ;子2(インジケータ) cO:=1 cS:=pS-4 Gui, 9: Margin, 0, 0 Gui, 9: -Border +ToolWindow +AlwaysOnTop -Caption -HScroll -VScroll Gui, 9: Show, x%cO% y%cO% w%cS% h%cS% GUI, 9: Color, 888888 Gui, 9: +LastFound Child2_Handle :=WinExist() ;親子処理 DllCall( "SetParent", "uint", Child_Handle, "uint", Parent_Handle ) DllCall( "SetParent", "uint", Child2_Handle, "uint", Child_Handle ) } 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) Gui,7:Hide 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) Gui,7:Hide 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) Gui,7:Hide } 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,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( ( 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 } } MouseCheckCommon(X,Y,alpha,TA,HEN){ ;----------------------------------------------------------- ;マウスチェック処理共通部 ;----------------------------------------------------------- global VISIBLE,INVISIBLE global ForceToShow ;ウィンドウの透過値取得 IsPanelVisible:=alpha ;消す2(起動したてのときなど) if (IsPanelVisible=""){ alpha:=ShowWindow(0,TA) } WinGetPos, X1, Y1, W, H, %TA% hit:=IsHit(X,Y, X1,Y1,X1+W,Y1+H,IsPanelVisible,HEN) ;出す if (hit=1 && IsPanelVisible=INVISIBLE) alpha:=ShowWindow(1,TA) ;消す if (hit=0 && IsPanelVisible=VISIBLE && ForceToShow=0) alpha:=ShowWindow(0,TA) ;tooltip, X=%X% Y=%Y% alpha=%alpha% TA=%TA% HEN=%HEN% IsPanelVisible=%IsPanelVisible% hit=%hit% return alpha } MouseCheck: ;----------------------------------------------------------- ;マウスチェック処理 ;----------------------------------------------------------- ;SAIウィンドウが存在するか If WinExist("ahk_class sfl_window_class"){ if (firstDetect=1){ sleep,1000 AllHide() } firstDetect:=0 }else{ firstDetect:=1 } ;SAIがアクティブじゃないなら戻る If !WinActive("ahk_class sfl_window_class"){ AllHide() return } ;ツール if (SW_TOOL=1){ ;色インジケータ更新 getToolCol() } ;クリック中待機 loop{ LButtonStat:=GetKeyState("LButton") If (LButtonStat=0){ break } return ;sleep,100 } ;マウス座標取得 MouseGetPos, X , Y ;ツール if (SW_TOOL=1){ aTOL:=MouseCheckCommon(X,Y,aTOL,TA_TOOL,HEN_TOOL) } ;カラー if (SW_COL=1){ aCOL:=MouseCheckCommon(X,Y,aCOL,TA_COL,HEN_COL) } ;レイヤ if (SW_LAY=1){ aLAY:=MouseCheckCommon(X,Y,aLAY,TA_LAY,HEN_LAY) } ;ナビゲータ if (SW_NAV=1){ aNAV:=MouseCheckCommon(X,Y,aNAV,TA_NAV,HEN_NAV) } return getToolCol() ;----------------------------------------------------------- ;ツールウィンドウの選択色を取得して表示 ;----------------------------------------------------------- { global TA_TOOL global VISIBLE,INVISIBLE global aTOL global pS ;ツールウィンドウの位置(スクリーン) WinGetPos, TolX, TolY, , , %TA_TOOL% ;選択色ボックスのハンドル ControlGet,tolColHwnd,Hwnd,, sfl_window_class1, %TA_TOOL% ;選択色ボックスの位置(ツールウィンドウに対して) ControlGetPos, tolColX, tolColY, , , sfl_window_class1, %TA_TOOL% ;GUI位置 X:=TolX+tolColX+2 Y:=TolY+tolColY+0 ;色取得位置(選択色ボックス基準) getX:=10 getY:=10 ;選択色ボックスのデバイスコンテキストを取得して色を拾って破棄 hdcTolCol := DllCall("GetDC",UInt,tolColHwnd) col := DllCall("GetPixel", UInt, hdcTolCol, Int,getX, Int,getY) DllCall( "gdi32.dll\DeleteDC" , UInt, hdcTolCol ) ;BGR=>RGB col:=ReverseR&B(col) ;インジケータの色変更 GUI, 9: Color, %col% IsPanelVisible:=aTOL if (IsPanelVisible=VISIBLE){ Gui, 7: Hide }else{ Gui, 7: Show, NA x%X% y%Y% w%pS% h%pS% } return } ReverseR&B(Color){ ;----------------------------------------------------------- ; Color RRGGBB >> BBGGRR >> RRGGBB 変換 2009-05-19 ; http://d.hatena.ne.jp/ajinoya/20090605/1244158617 ;----------------------------------------------------------- SetFormat, INTEGER, H RevColor := ((Color & 0xFF) << 16) + (Color & 0xFF00) + ((Color & 0xFF0000) >> 16) RevColor := "" . RevColor StringTrimLeft, RevColor, RevColor, 2 RevColor := "000000" . RevColor StringRight, RevColor, RevColor, 6 SetFormat, INTEGER, D Return RevColor } ExitSub: ;----------------------------------------------------------- ;終了処理 ;----------------------------------------------------------- SetTimer, MouseCheck, Off if SW_TOOL=1 aTOL:=ShowWindow(1,TA_TOOL) if SW_COL=1 aCOL:=ShowWindow(1,TA_COL) if SW_LAY=1 aLAY:=ShowWindow(1,TA_LAY) if SW_NAV=1 aNAV:=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]]

表示オプション

横に並べて表示:
変化行の前後のみ表示: