数値と文字列の入力を取得する

このセクションは、スクリプト実行中に3種類のユーザの入力を促すサンプルです。

  1. はい/いいえの応答
  2. 1つの文字列
  3. 様々なタイプの入力 (GetN)
 ユーザインターフェースモジュール (UIM)は、複雑なユーザインターフェースコントロールの構築を可能にします。UIM オブジェクト ページを確認してください。

はい/いいえの応答を得る

GetYesNoコマンド は、ユーザから「はい」または「いいえ」の応答を得るのに使うことができます。 コマンドは3つの引数を取ります。

構文: getyesno stringMessageToUser numericVariableName windowTitle

例えば、スクリプトウィンドウに次の行を入力すると、Check Sign of X というウィンドウタイトルで、ユーザにShould X be positive?というはいいいえキャンセルで答える質問のポップアップを開きます。 はい を選択すると、xpos に値1が割り当てられます。 いいえを選択すると、xpos に値0が割り当てられます。 キャンセルを選択すると、#Command Error!が出力され、実行が停止します。

getyesno "Should X be positive?" xpos "Check Sign of X"

追加のスクリプト処理がイベントで必要となる場合、このコマンドを他の場所で呼び出し、数値をテストすることができます。次のサンプルは、getyesno をコードのMain セクションから呼び出し、2つの文字列入力を引数としてセクションに渡します。

[Main]
// 呼び出しコード
int iVal = -1;
run.section(,myGetYesNo,"Create a Graph of results?""Graphing Option");
if( iVal > 0 )
{
   type "Graph generated";        // はいの応答  
}
else
{
   type "Graph NOT generated";    // いいえまたはキャンセルの応答
}
 
// 'myGetYesNo' セクション
[myGetYesNo]
getyesno (%1) iVal (%2);

上記のLabTalkスクリプトには2つのセクションMain および myGetYesNoが含まれているので、スクリプトウィンドウで直接実行することはできません。OGSファイルとして保存してから、スクリプトウィンドウでrun.section(test.ogs,main) と入力し、ENTERキーを押し実行してください。詳細はOGSファイルのセクションを参照してください。

文字列を取得

GetString は、ユーザが入力する1つの文字列に対して使用します。

%B = "";
GetString (Enter as Last, First) Last (Your Name);
// キャンセルはGetYesNoのテクニックを使わずに中断
if("%B"!="Last")
{
    type User entered %B.;
}
else
{
    type User clicked OK, but did not modify text;
}

複数の値を取得

GetN または GetNumber ダイアログ は、数字、文字、リスト、または制御から選んで入力します。(Originの古いバージョンでは、数値のみが可能でした) バージョン8.1より前のバージョンでは、GetNumberは文字列入力用の文字列レジスタ(%Aなど)のみをサポートしていました。Origin8.1以降のバージョンの場合、GetNumberでは文字列変数(string str1$ など)と文字列レジスタの両方が使用できます。GetNは、現在、ダイアログタイトルに加えて50つまでの変数を受け付けます。

文字列を最初に宣言する必要があることに注意してください。 代入による方法ではなく、変数を作成する方法は常に良い方法となります。詳細は、(文字列)変数のスコープを参照して下さい。 例えば:

// 最初に、使用する変数を宣言
double nn = 3.2;
string measurement$="length", units$="inches", event$="Experiment #2";
 
// GetNダイアログを使ってユーザデータを収集
getn
(Value) nn 
(Measurement Type) measurement$
(Units) units$
(Event Name) event$
(Dialog Title);

これにより、次のダイアログが開き、ユーザに入力を促します。

GetN Dialog.png

このダイアログに入力された値は、宣言した変数に割り当てられます。 変数は初期値(以前GetN が呼び出されていた)を持つ場合、その値は入力ボックスに表示され、それ以外の場合、入力ボックスは空白となります。 どちらの場合も、初期値を変更したり、そのまま使用することができます。

入力されたデータをチェックするには、次のスクリプトを実行します。

// データを出力
type In %(event$), the %(measurement$) was $(nn) %(units$);

次のサンプルスクリプトは、Graphがアクティブウィンドウ場合に、情報の入力を求めて折れ線とラベルを描画します。 GetN の呼び出しは、入力として文字列レジスタと事前定義のリストを使用します。

%A=Minimum;
iColor = 15;
dVal = 2.75;
iStyle = 2;
 
// GetNダイアログを開く
// %Aの前の余計な %記号は、変数名として扱うのではなく 
// 文字列レジスターを文字通りに解釈
getn (Label Quantile) %%A 
(Color) iColor:@C 
(Style) iStyle:@D 
(Value) dVal 
(Set Quantile);
 
draw -n %A -l -h dVal;     // 名前を付けた水平線を描画
%A.color = iColor;         // 線の色をセット
%A.linetype = iStyle;      // 線種をセット
 
// 線の右端にQLabelという名前のテキストラベルを
// 作成
label -s -a x2 dVal -n QLabel %A; 
 
%A.Connect(QLabel,1);       // 2つのオブジェクトを接続

スクリプトは、%Aが1つの語句で、オブジェクトQLabel が存在しないことを前提としています。

@文字で始まる次の文字シーケンスは、GetN引数の事前定義されたリストにアクセスします。

リスト 説明
 :@B オブジェクトの背景属性のリスト
 :@C 基本の色リスト
 :@D 線種のリスト
 :@P パターンリスト
 :@S フォントサイズリスト
 :@T フォントリスト
 :@W 線の太さのリスト
 :@Z シンボルサイズのリスト

GetN ダイアログ内でリスト項目が選択されたときに返される値は、リスト内の項目のインデックスです。 例えば、GetN のリストの1つが下記のようであれば:

(Font Size) fs:@S

ダイアログのドロップダウンリストから 18 を選ぶと、18はリストの8番目の項目なので、変数 fs には値 8が入ります。



以下は、散布図を線+シンボルに変更したり、その逆の変更を実行するサンプルスクリプトです。

get %C -z iSymbolSize;  // 現在のシンボルサイズを取得
get %C -cl iLineColor;  // 現在の線の色を取得
iUseLine = 0;
// ダイアログを開く
getn (Symbol Size) iSymbolSize
     (Use Line) iUseLine:2s
     (Line Color) iLineColor:@C
     (Set Plot Style);
// 折れ線の場合
if(iUseLine == 1)
{
    set %C -l 1;           // 線を表示
    set %C -cl iLineColor; // 線の色を設定
}
// .. そうでなければ
else
    set %C -l 0;           // 線を非表示
set %C -z iSymbolSize;     // シンボルサイズを設定