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
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
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の値を変えるのか、値がどのような意味を持つのかはマニュアルに書いてありますので、必要な時に参照してください。
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を用いる時はこの例のようにすることをお勧めします。
前 Function Part1(Functoinの実行とMenu) - Igorの解説とか
次