Igor Proで関数をメニューバーから呼び出す.たった3行で
はじめに
Igor Proで処理を自動化する際には①マクロを書く,②関数を書く,の二種類の方法があります. 現在では,高速に動作する,コンパイル時にエラーチェックが入る,といった理由でマクロより関数の利用が推奨されているようです*1
ただ,関数と比べたマクロの利点として,マクロを定義するとメニューバーの「マクロ」欄に名前が表示されてワンクリックで実行できるようになります.
関数も,マクロみたいにメニューバーから使えるようにならないかな? と思ったのが今回の動機です.
結論: 3行でOK
調べてみたところ,思った以上に簡単に実現できることがわかりました. 以下の3行をどこか*2に書くと引数なしのユーザー定義関数がメニューバーから実行できるようになります.
Menu "Functions" FunctionList("*",";","KIND:2,NPARAMS:0") End
メニューに;
区切りのリストを渡すと複数のメニュー項目に展開されることを利用しています.KIND:2
は(組み込み関数ではなく)自作関数の指定,NPARAMS:0
は引数なしの関数の指定です.
FunctionList
関数の引数を工夫すると,いろいろと便利にできそうです.
// 例1: Renameで始まる名前の関数のみ表示 Menu "Rename" FunctionList("Rename*",";","KIND:2,NPARAMS:0") End // 例2: 特定のウィンドウで定義されている関数のみ表示 Menu "Experiment" FunctionList("*",";","KIND:2,NPARAMS:0,WIN:experiment.ipf") End
追記 (2016/11/25)
単に関数を実行する以上のことをしたい場合は,GetLastUserMenuInfo
操作関数を使うとよいようです.
// ユーザー定義関数の定義部分をメニューバーからワンクリックで表示 // (Windowsだとメニュー項目の数に制限があるようです) Menu "Definitions" FunctionList("*",";","KIND:2"), DisplayDefinition() End Function DisplayDefinition() GetLastUserMenuInfo DisplayProcedure S_Value // 直前に選択したメニュー項目がS_Valueに格納されている End