[HMM0058A]
●setactivehidemaru 文の引数
- setactivehidemaru文を使って編集ウィンドウを切り替えたいのですが、使い方がよく分かりません。
setactivehidemaru文には秀丸エディタウィンドウの「番号」か「ウィンドウハンドル」を指定します。
- [解説]
ウィンドウ番号
秀丸エディタウィンドウの「番号」とは、秀丸エディタのウィンドウを画面手前から順に数えた番号になっています(一番手前が0 です)。 ファイル名からウィンドウ番号を取得するには findhidemaru()関数を使います。
//------- サンプルマクロ1 -------// // "c:\\hidemaru\\install.txt" のウィンドウ番号を取得する $file = "c:\\hidemaru\\install.txt"; #h_order = findhidemaru($file); message $file + " のウィンドウ番号は " + str(#h_order) + " です。"; if( #h_order != -1 ) setactivehidemaru #h_order; //切り替え endmacro; // ---------------------------- //
※ ファイルが開かれていない場合は、ウィンドウ番号は -1 になります。
ウィンドウハンドル
1.で説明したウィンドウ番号は、setactivehidemaruを繰り返し使用してウィンドウの切り替えを行うと変化してしまいます。 いちいちfindhidemaru()関数を使ってウィンドウ番号を取得してもいいのですが、 「ウィンドウハンドル」を取得しておけば(ウィンドウを閉じない限り)そのウィンドウを一発で指定できます。
//------- サンプルマクロ2 -------// // "c:\\hidemaru\\install.txt" のウィンドウハンドルを取得する $file = "c:\\hidemaru\\install.txt"; #h_wnd = hidemaruhandle(findhidemaru($file)); message $file + " のウィンドウハンドルは " + str(#h_wnd) + " です。"; if( #h_wnd != 0 ) setactivehidemaru #h_wnd; //切り替え endmacro; // ---------------------------- //
※ hidemaruhandle()関数の引数にはハンドルを取得したいウィンドウのウィンドウ番号を指定します。 ウィンドウが存在しない場合(ウィンドウ番号が-1 の場合)、hidemaruhandle() 関数は 0 を返します。
findhidemaru() 関数を使う場合の注意点
findhidemaru() 関数の引数にアクティブウィンドウ(ウィンドウ番号0)のファイル名を指定した場合も (ウィンドウが存在しない時と同様に) -1を返すため、 上記のサンプルマクロを c:\hidemaru\install.txt上で実行すると「c:\hidemaru\install.txt のウィンドウ番号は -1 (ウィンドウハンドルは 0)です。」と嘘(^^;を言われてしまいます。 (findhidemaru() 関数は自分自身を見つける事はできない。)
例えばアクティブウィンドウのウィンドウハンドルを取得したい場合は、
#hwnd_act = hidemaruhandle(findhidemaru(filename));
※ filename には現在のウィンドウのファイル名が入る(「●「キーワード」とは?」を参照して下さい)。ではなく
#hwnd_act = hidemaruhandle( 0 );
と指定しなければ正しく動作しません。
setactivehidemaru文の第2引数の使い方
2番目のパラメータを指定すると、自分自身のウィンドウの重なり位置を調節できます。 ウィンドウ番号かハンドルをを指定すると、指定したウィンドウの下に移動します。
- -1を指定すると、一番下に移動します。 2番目のパラメータは省略可能です。
初期状態。アルファベット(a〜d)がウィンドウハンドル(ウィンドウ識別番号)、数字がウィンドウ順番です。
┏━━━━━━━┓ ┃d ┃ ┣━━━━━━━┫ ┃3 ┏━━━━━┻━┓ ┃ ┃c ┃ ┃ ┣━━━━━━━┫ ┃ ┃2 ┏━━━━━┻━┓ ┃ ┃ ┃b ┃ ┗━┫ ┣━━━━━━━┫ ┃ ┃1 ┏━━━━━┻━┓ ┃ ┃ ┃a ┃ ┗━┫ ┣━━━━━━━┫ ┃ ┃0 ┃ ┗━┫ ┃ ┃ ┃ ┗━━━━━━━┛
「次の秀丸エディタ」に切り替えるため、2番目のウィンドウをアクティブにする。(setactivehidemaru 1;) 単純に2番目のウィンドウ(b)が先頭に移動するだけなので、(a)と(b)が入れ替わるだけ。 再度2番目のウィンドウをアクティブにしても、(a)と(b)が入れ替わるだけで、(c)には移動しない。
setactivehidemaru 1;実行時の動作 ┏━━━━━━━┓ ┃d ┃ ┣━━━━━━━┫ ┃3 ┏━━━━━┻━┓ ┃ ┃c ┃ ┃ ┣━━━━━━━┫ ┃ ┃2 ┏━━━━━┻━┓ ┃ ┃ ┃b ┃ ┗━┫ ┣━━━━━━━┫ ┃ ┃0 ┣━┓ ┃ ┃ ┃ a┃ ┗━┫ ┣━┫ ┃ ┃ 1┃ ┗━┳━━━━━┛ ┃ ┃ ┃ ┗━━━━━━━┛
←→ ┏━━━━━━━┓ ┃d ┃ ┣━━━━━━━┫ ┃3 ┏━━━━━┻━┓ ┃ ┃c ┃ ┃ ┣━━━━━━━┫ ┃ ┃2 ┏━━━━━┻━┓ ┃ ┃ ┃b ┃ ┗━┫ ┣━━━━━━━┫ ┃ ┃1 ┏━━━━━┻━┓ ┃ ┃ ┃a ┃ ┗━┫ ┣━━━━━━━┫ ┃ ┃0 ┃ ┗━┫ ┃ ┃ ┃ ┗━━━━━━━┛
「次の秀丸エディタ」で順次ウィンドウを切り替えるには、先頭のウィンドウを最後に移動する必要があります。 第二引数を指定し、先頭のウィンドウを最後に移動させる。
setactivehidemaru 1,-1;実行時の動作 ┏━━━━━━━┓ ┃d ┃ ┣━━━━━━━┫ ┃2 ┏━━━━━┻━┓ ┃ ┃c ┃ ┃ ┣━━━━━━━┫ ┃ ┃1 ┃ ┃ ┃ ┏━━━━━┻━┓ ┗━┫ ┃b ┃ ┃ ┣━━━━━━━┫ ┃ ┃0 ┣━┓ ┗━┫ ┃ a┃ ┃ ┣━┫ ┃ ┃ 3┃ ┃ ┃ ┃ ┗━┳━━━━━┛ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━━┛
→┏━━━━━━━┓ ┃d ┃ ┣━━━━━━━┫ ┃1 ┏━━━━━┻━┓ ┃ ┃c ┃ ┃ ┣━━━━━━━┫ ┃ ┃0 ┃ ┃ ┃ ┣━┓ ┗━┫ ┃ b┃ ┃ ┣━┫ ┃ ┣━┻━┓ ┗━┳━┳━━━┛ a┃ ┃3 ┣━━━━━━━┫ ┃ ┃ 2┃ ┃ ┃ ┃ ┗━┫ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━━┛
→┏━━━━━━━┓ ┃d ┃ ┣━━━━━━━┫ ┃0 ┣━┓ ┃ ┃ c┃ ┃ ┣━┫ ┃ ┃ 3┃ ┃ ┣━┻━┓ ┗━┳━┳━━━┛ b┃ ┃ ┣━━━━━━━┫ ┃ ┃2 ┏━━━━━┻━┓ ┗━┫ ┃ a┃ ┃ ┣━━━━━━━┫ ┃ ┃ 1┃ ┃ ┃ ┃ ┗━┫ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━━┛