Igorの解説とか

このブログはWavemetrics社が開発および販売しているIgorについて解説するブログです。

Function作成 Part2(FunctionにおけるPrompt、V_flag)

マクロの組み方で説明したPrompt文ですが、Funcitonでは少し勝手が違います。

参考 マクロの組み方Part3(Prompt:ユーザーからの入力 その1) - Igorの解説とか

 

 

Macroと同じように使おうとすると・・・
Function Prompt_not_work(refstring)
 String refstring
 Prompt refstring,"Enter words"
 Print refstring
End

 

これを実行しようとして、コマンドライン

Prompt_not_work()

と打つと 文字列変数または文字列関数が不正です  というエラーが出てきます。

これを防ぐためには

Functionでプロンプト
Function mPrompt_work()
 String refstring
 prompt refstring,"Enter words"
 Doprompt "Prompt not work",refstring
 if( V_flag != 0)
  return -1 //キャンセルを押した時にエラーを出さないようにする
 endif
Prompt_not_work(refstring)
End

Function Prompt_work(refstring)
 String refstring
 Print refstring
End


 このようにすると良いです。

Doprompt "自由な名前(入力windowの上に出てくる名前になる)",Promptで用いる変数や文字列,Promptで用いる変数や文字列,・・・・

V_flagは様々なコマンドを実行する際に変化する変数です。
Dopromptにおいては、
続行ボタンをクリックすると0 、キャンセルボタンをクリックすると1
を意味します。
どのコマンドがV_flagの値を変えるのか、値がどのような意味を持つのかはマニュアルに書いてありますので、必要な時に参照してください。

 

この例では、まずmPrompt_work()でPromptを実行し、外部から文字列を入力し、その文字列をもとにPrompt_work()を実行するようにしています。

ですので、Menuを使う際は、mPrompt_work()を実行するようにしてください。

 

また、関数を2つに分けていますが、mPrompt_work()の方を

if( V_flag==0)

 Print refstring

endif

と変更すれば上手く実行されますし、1つの関数で済みます。

しかし

◎複雑な事をすると、エラーが出る(確か、詳しく検証は気が向けばします。)

   参照URLPrompt function is not allowed in ThreadSafe function | IgorExchange

   mつけるのもここから

◎1つの関数に多くの機能をつけすぎるのは良くない

 

という理由から、Promptを用いる時はこの例のようにすることをお勧めします。

 

目次 サイトマップ - Igorの解説とか

前  Function Part1(Functoinの実行とMenu) - Igorの解説とか

次