addmenu 対話的にボタン/メニューを定義 呼び出し手順 addmenu(button [,submenus] [,action]) addmenu(gwin,button [,submenus] [,action]) 引数 button 文字列. ボタン名. キーボードショートカットで使用される名前の文字を前に &を置くことができます; この文字はGUIで下線が引かれます. MacOSXでは,同じ名前のサブメニューが自動的に追加されます (メニューバーにボタンは追加されません). submenus 文字列のベクトル. sub_menus項目名 action 2つの要素を有するリスト action=list(flag,proc_name) flag 整数 (デフォルト値は 0) flag==0 処理はscilab命令により定義される flag==1 処理はCまたはFortran処理により定義される flag==2 処理はscilab関数により定義される proc_name 命令またはコールするプロシージャ名を有する scilab変数名を指定する文字列. gwin 整数. ボタンをインストールするグラフィックウインドウの 番号 説明 この関数によりメインウインドウまたは グラフィックウインドウコマンドパネルに ボタンまたはメニューをユーザーが追加できます. action引数が指定されない場合, ボタンに関連する処理を 文字列に指定したscilab命令により定義する必要があります. この文字列の名前は, + button (メインウインドウコマンドの場合) + button_gwin (グラフィックウインドウコマンドの場合) action 引数に 0を指定した場合, proc_name には,Scilab文字列ベクトル の名前を指定します. k番目のsub_menuに関連する処理は, この文字列変数のk番目の要素に保存したscilab命令で定義します. action引数に1を指定した場合, proc_name はCまたはFortranプロシージャ を指します. このプロシージャはFortranサブルーチン(default/fbutn.f) によりインターフェイスが作成されるか, またはlink関数によりscilabに 動的にリンクされます. Cの呼び出し手順は以下のようになります: (char* button_name, int* gwin,int *k) action引数に2を指定した場合, proc_name はScilab関数を指します. この関数の呼び出し手順は以下のようになります: + proc_name(k) (メインウインドウコマンドの場合) + proc_name(k,gwin) (グラフィックウインドウまたは メインウインドウコマンドの場合) if (getscilabmode() == "STD") then addmenu('foo'); foo = 'disp(''hello'')'; addmenu('Hello',['Franck';'Peter']) Hello = ['disp(''hello Franck'')';'disp(''hello Peter'')']; addmenu('Bye',list(0,'French_Bye')); French_Bye = 'disp(''Au revoir'')'; else mprintf('This example requires to use scilab with GUI mode.\n'); end addmenu(0,'Hello',['Franck';'Peter']); Hello_0 = ['disp(''hello Franck'')';'disp(''hello Peter'')']; //Cで定義したコールバック // コールバックコードを作成 code=[ '#include ""machine.h""' '#include ""sciprint.h""' 'void foo(char *name, int *win, int *entry)' '{' ' if (*win==-1) ' ' sciprint(""menu %s(%i) in Scilab window selected.\n"", name, *entry+1);' ' else' ' sciprint(""menu %s(%i) in window %i selected.\n"", name, *entry+1, *win);' '}']; // foo.cファイルを作成 current_dir = pwd(); chdir(TMPDIR); mputl(code, TMPDIR+'/foo.c'); // Makefileを作成 ilib_for_link('foo','foo.c',[],'c'); exec('loader.sce'); chdir(current_dir); // メニューを追加 addmenu(0,'foo',['a','b','c'],list(1,'foo')); 参照 setmenu unsetmenu delmenu