マクロからプラグインの呼び出し
-
これまでは Delphi7 と TEditor を使用して自分でエディタを作成してきましたが、「Mery」に完全に移行する事ににしました。
マクロ機能、Grep機能、矩形選択等が使えるのが決めてになりました。素晴らしいエディタの公開、ありがとうございます。マクロやプラグインを使用してみて、質問が2件あります。
1:プラグインの実行ですが、現在は「F3」キーにプラグインを設定して実行していますが、マクロからプラグインを起動する事は可能でしょうか?
2:タブを使用しない SDI の設定で 2個の文書を開いている時に、1個を閉じたら他方にフォーカスを移動する動作を実現したくて、以下のマクロをメニューから実行して動作させました。
次の文書が前面に表示されますが、文書にフォーカスが当たっていない状態になり、キー操作を受け付けません。
文書をマウスでクリックするか、「Alt」+「Esc」を操作すれば、フォーカスが当たり、キー操作が可能になります。解決策はありますでしょうか?
NextDocument.js
-----------------------------------------
//SDI の設定で使用します。具体的には、メニューの「ウィンドウ」の「タブを有効」のチェックを外して下さい。
//このファイルを「Macros」に設定し、メニューの「マクロ」から実行させます。
//ただし、次文書に移動しますが、フォーカスが当たらない状態になります。
//とりあえず、「Alt」+「Esc」でフォーカスが当たります。
//MEID_WINDOW_NEXT
editor.ExecuteCommandByID(2195);
//MEID_FILE_CLOSE
editor.ExecuteCommandByID(2095);
-----------------------------------------よろしくお願いします。
| 大石剛司 | 返信 -
Mery をお試しいただきありがとうございます。
Delphi + TEditor、当時は定番でしたね。私も Mery を開発する前に自分用のテキストエディタを Delphi6 + TEditor で開発しており、その後、Unicode 対応のために Delphi6 + TNT + TNotePad に移行した次第です。(今は Delphi XE2 + TNotePad)
> マクロ機能、Grep機能、矩形選択等が使えるのが決めてになりました。素晴らしいエディタの公開、ありがとうございます。
こちらこそ、ありがとうございます。TNotePad は TEditor と内部の構造が根本的に異なっており、巨大なファイルの扱いが苦手という欠点がありますから、その点はご注意ください。> 1:プラグインの実行ですが、現在は「F3」キーにプラグインを設定して実行していますが、マクロからプラグインを起動する事は可能でしょうか?
ExecuteCommandByID をご存知のようなのでプラグイン SDK のソースを見ていただいたの思いますが、その中に記載されている MEID_PLUGINS = 7168 がプラグインのコマンドの ID の開始番号となっております。
プラグインが登録されている順に 7168 から連番が降られます。
editor.ExecuteCommandByID(7168);
↑ これで一つ目のプラグインが実行されます。
> 2:タブを使用しない SDI の設定で 2個の文書を開いている時に、1個を閉じたら他方にフォーカスを移動する動作を実現したくて、以下のマクロをメニューから実行して動作させました。
ExecuteCommandByID はメニュー上のコマンドを無理やり実行させるための動作保証なしの隠し機能ですから、ご希望の動作にならないケースも多々あると思います。
> NextDocument.js
SDI モードに設定されている状態でウィンドウを閉じたときに、前のウィンドウにフォーカスを移動したい、ということでしたら、以下のように普通にドキュメントを閉じていただくとご希望の動作になると思います。(理由はわかりませんが ^^;)
---- NextDocument.js ----
document.Close();
--------------------------| Kuro | 返信 -
回答ありがとうございます。
>プラグインが登録されている順に 7168 から連番が降られます。
実行できました。
>document.Close();
考えすぎていたようで、これで大丈夫でした。
ありがとうございました。
| 大石剛司 | 返信