Tutorial-objs
LabTalkスクリプトプログラミングは、さまざまなオブジェクトプロパティとメソッドへのアクセスを提供します。
オブジェクトプロパティにアクセスするための構文は次の通りです。
objName.property (数値プロパティ)
または
objName.property$ (テキストプロパティ)
メソッドを操作する構文は次のとおりです。
objName.method(arguments)
オブジェクトは一般的なプロパティまたはメソッドを共有する場合がありますが、通常、各オブジェクトには固有のプロパティとメソッドがあります。特定のオブジェクトの詳細については、オブジェクトのリストを参照してください。
多くのオブジェクトは、ワークブック、ワークシート、ワークシート列、グラフ内のデータプロットなど、Originプロジェクトの可視コンポーネントです。一部のOriginオブジェクトとそのOPJコンポーネントとの対応を以下に示します。
INI オブジェクトやシステムオブジェクトといった他のオブジェクトはインターフェイスに表示されません。
このチュートリアルでは、以下の項目について解説します。
プロパティ値を返す
//スクリプトウィンドウのプロパティ値(ショートネーム)を読み込み page.name$ = ; //文字列変数にテキストプロパティ値(ロングネーム)を割り当て string str1$ = page.longname$ ; //double型の変数にプロパティ値(ページ幅)を割り当て double width = page.width;
str1$ = ;//スクリプトウィンドウに "For Testing"を返す width = ;//ページ幅の数値を返す
プロパティ値を設定
wks.name$ = "Test1";//ワークシート名をTest1に変更
Note: この場合、layerオブジェクトを使用してもワークシート名の変更が可能です。
wks.nCols = 5;
// ページロングネームを使って列2のロングネームを設定 wks.col2.lname$ = page.longname$; // 列の幅を広く wks.col2.width = 12; // 3列目をエラーバー列に設定 wks.col3.type = 3;
範囲をオブジェクトとして定義してそのプロパティを使用
概要で述べたように、OriginオブジェクトはOriginプロジェクトファイル (OPJ) のグラフィカルインターフェイスと主要コンポーネントで表示されます。
一般に、何も指定されていない場合はアクティブなコンポーネントがデフォルトで使用されます。非アクティブなコンポーネントを操作する場合は、名前/インデックスを指定するか、範囲を定義してこのコンポーネントにマッピングします。
layer.unit = 2;
%(page.name$)!layer2.unit = 2;
Note: 単位設定を確認するには、フォーマット:作図の詳細(レイヤ属性)をクリックして作図の詳細 - レイヤ属性ダイアログを開き、レイヤの大きさタブを開きます。レイヤ2と3で単位の設定がインチに変更されているはずです。
range lay2 = [%(page.name$)]layer2!;
lay2.width = 5; lay2.color = color(LT Gray); //塗り色を定義するのに色インデックスも使用可能です //例えば以下のスクリプトで上述のものと同じように動作します //lay2.color = 19;
page.active = 1;
range lay1 = !;
lay1.y.type = 1;
Note: 以下のスクリプトを実行することでもファイルのインポートが可能です。
//新規ワークブックを作成 newbook; //ファイルをインポート string fn$=system.path.program$ + "Samples\Graphing\Categorical_Data_1.dat"; impASC fname:=fn$; //system.path.program$は非表示オブジェクトのプロパティ
page.xlcolname = 0; // スプレッドシートセル表記をオフに wks.addcol(B2);
ワークブックのスプレッドシートセル表記については、FAQ-849 を参照してください。
//列Bを現在の列として選択 wks.col = 2; //現在の列の前に列A2を挿入 wks.insert(A2);
//スパークラインとコメントを削除してロングネームと単位行だけにする wks.labels(-CS); //または以下のスクリプトを実行しても同じ結果を取得できます //wks.labels(LU);
//A2列およびB2列(4番目の列)のロングネームを設定 col(A2)[L]$ = "Abb.Direction"; col(4)[L]$ = "Description"; //列Bの単位を設定 col(B)[U]$ = "km/h";
wks.col2.width = 10; wks.col4.width = 17;
//文字列配列を定義 StringArray aa, bb; //文字列配列aaに文字列を追加 aa.Add("Strong gale"); //文字列配列aaをbbにコピー bb.Copy(aa); //bbをaaに追加 aa.Append(bb); //区切り文字として , を使用して他の4つの文字列をデータセットとして追加 aa.Append("Strong breeze,Fresh breeze,Moderate gale,Moderate breeze", ",");
aa.CopyTo(col(4));
for(int ii=1; ii<=wks.maxRows; ii++) { string str1$ = col(1)[$(ii)]$; //左からみて最初の文字を取得 string str2$ = str1.Left(1)$; //str2を大文字に str2.MakeUpper(); col(2)[$(ii)]$ = str2$; }
Note: Xファンクションcsetvaluesを使用するか列値の設定ダイアログを使って組み込みの文字列関数を呼び出すことで同じ操作が可能です。
//グラフウィンドウを作成 win -t plot; //'line1'に接続されたmyLineという名前のGObjectを宣言 GObject myLine = line1; //オブジェクトを作成(list -o で 'line1'を表示) draw -n myLine -l {1,2,6,4};
//線の色を赤に変更 myLine.color = color(red); //矢印の終了の形状を変更 line1.arrowEndShape = 2; //水平、垂直方向の移動を有効化 line1.hMove = 1; line1.vMove = 1;
label -p 20 50 -n myText Distance;
//テキストラベルの枠を影に設定 myText.background = 2;
//置換表記を使用しないようにあらかじめ文字列を定義 string str1$ = "$" + "(sqrt((line1.y2-line1.y)^2+(line1.x2-line1.x)^2), .2)"; //スクリプトは全イベント後に実行 myText.script = 5; //オブジェクトにスクリプトテキストを追加 myText.script$="myText.text$ = "Line Length = %(str1$)"; doc -uw;";
myText.draw(global);
Note: 同様に、プロパティダイアログを使用せずに、以下のスクリプトを実行することもできます。
line1.script = 3; line1.script$ = "myText.draw(global);";
line1.Connect(myText, 0, 1, 2, 6);