スクリプト作成
スクリプトの記述
スクリプトを記述する際には、いくつかの重要な概念と用語があります:
- プロセスは、スクリプト内でコマンドを実行するために使用できるコマンド文字列です。
- コンポーネントは、Tool Paletteパネル上の視覚的な制御オブジェクトで、スクリプトフォームにドラッグアンドドロップしてデザインを操作できます。
- スクリプトフォームに配置されたコンポーネントには、メソッド、プロパティ、イベントがあります。
- オブジェクトインターフェースは、スクリプトから設計文書のデータを抽出および変更するために使用できる特別なオブジェクトインターフェースです。
スクリプト言語
デフォルトのスクリプト言語はDelphiScript(*.pas)に設定されています。スクリプトエンジン自体はEmbarcadero Delphiで書かれており、ツールパレットパネルはDelphiのVCL(Visual Component Library)に基づいています。
DelphiScriptユニット
基本的なスクリプト演習は、まず新しいプロジェクトとスクリプトファイルを作成することから始めることができます。プロジェクトとスクリプトファイルがDelphiScript言語に設定されていると仮定すると、以下のようにシンプルな「Hello World」スクリプトを入力できます。
Procedure ShowAMessage;
Var
DefaultMessage;
Begin
DefaultMessage := 'Hello World!';
ShowMessage(DefaultMessage);
End;
手順の中には、DefaultMessage
変数で定義された"Hello World"メッセージをダイアログで開く標準のDelphiScript ShowMessage
関数があります。
スクリプトの実行
スクリプトを実行するには、メインメニューからFile » Run Scriptを選択し、実行する項目を選択ダイアログから利用可能なスクリプト手順を選択します。バージョンが実行されると、メッセージを表示するダイアログが開きます。
File » Run ScriptメニューからシンプルなHelloWorld
スクリプトユニットを実行しています。
スクリプトは、エディターの実行コマンドを使用して実行することもできます。これには、Runボタン()、F9 ショートカットキー、またはメインメニューからRun » Runを選択することでアクセスできます。
Runコマンドが初めて選択されると、実行するアイテムを選択ダイアログが開き、スクリプトのメインプロシージャ(この場合はShowAMessage
)を指定できます。一度設定すると、エディターからRunコマンドを使用して繰り返しスクリプトを簡単に実行できます。Run » Set Project Startup Procedureを使用して設定を異なるプロシージャに変更するか、スクリプトプロジェクトを閉じて再度開くことで設定をクリアできます。
実行中のスクリプトを停止するには、停止ボタン()、メインメニューからRun » Stopを選択するか、Ctrl+F3のショートカットを使用します。
DelphiScriptフォーム
上で作成したHelloWorldプロジェクトを拡張して、フォームユニットを使用した類似のスクリプトを作成できます。 スクリプトフォームは、ボタン、メモ、リストボックスなどのさまざまなコントロールをホストできるダイアログウィンドウです。コントロールがイベントを生成したとき、たとえばボタンがクリックされたときに反応するイベントハンドラーを持っています。 新しいスクリプトフォームを作成するには、Projectsパネルからプロジェクト名を右クリックし、Add New to Projectオプションを選択し、Script Formを選択します。スクリプトは、メインメニューからFile » Save Asを使用して保存および名前変更できます。
現在フォーカスされているフォームやそのコンポーネントのプロパティ値を見たり編集したりするには、Object Inspectorパネルを開きます。Object Inspectorパネルは、フォームのプロパティを変更し、現在のフォームに関連付けられたイベントハンドラーにコードを挿入するために使用されます。
スクリプトフォームには、文書の下部にCode タブとFormタブの2つのタブがあります。
Code タブには、上記のようなイベントハンドラや手続きが含まれています。一方、Formタブはダイアログを表し、コントロールと関連するイベントハンドラがあります。タブを使用するか、F12ショートカットキーを使用して2つのタブ間を切り替えます。
Object Inspectorパネルを使用すると、アクティブスクリプトフォーム内のコンポーネントのプロパティとイベントを調査し、編集することができます。デザインエディターウィンドウのアクティブスクリプトフォーム上で単一のコンポーネントをクリックすると、そのコンポーネントが選択され、Object Inspectorパネルに関連付けられた属性が表示されます。または、パネルの上部にあるドロップダウンフィールドを使用して、現在アクティブフォーム上に配置されているすべてのコンポーネントのリストから選択することもできます。フォーム自体も含まれています。
フォームダイアログとそのアクションを設定するために、オブジェクトインスペクターパネルを使用します。
情報はProperties とEventsの2つのタブに表示されます:
- パネルのProperties タブには、選択されたコンポーネントのすべてのプロパティ属性がリストされています。利用可能な属性の正確なリストは、現在調査中の特定のタイプのコンポーネントによって異なります。プロパティとは、その可視性の振る舞いまたは操作に影響を与えるオブジェクトの特性です。例えば、Behaviorサブカテゴリー内のVisibleプロパティは、オブジェクトが配置されているスクリプトフォーム上に表示されるかどうかを決定します。コンポーネントのプロパティは必要に応じて変更できます。プロパティの右側にあるフィールド内をクリックし、直接入力するか、チェックボックスを切り替えるか、または適切な場合はドロップダウンからエントリを選択します。
- パネルの Eventsタブは、現在選択されているコンポーネントが反応できるすべてのイベントのリストを提供します。ここでも、利用可能なイベントの正確なリストは、現在調査中の特定のタイプのコンポーネントによって異なります。フォーム上のボタンがクリックされるなどのイベントが発生すると、コード内でイベントの処理手順が定義されている場合、スクリプトは適切なアクションを取ります。このタイプの手順はイベントハンドラと呼ばれます。
イベントハンドラの基本骨格は、オブジェクトインスペクターパネル内からスクリプトドキュメントのコードに追加することができます。イベントを定義したいコンポーネントを選択し、特定のタイプのイベントを選び、その後イベントの右側のフィールド内をダブルクリックします。イベントの名前が作成され、イベント処理手続きの名前の定義に使用されます - FormName.EventName
。その後、イベント処理手続きの基本骨格コードがメインスクリプトコードに追加され、デザインスペースのアクティブなタブになります。イベントが発生し、実行中のスクリプトによって検出されたときに望ましい反応を提供するために、イベント処理手続きの「充填」をコーディングすることができます。
パネルの下部には、利用可能な場合、現在選択されているプロパティまたはイベントの要約説明が表示されます。
このフォームスクリプトでは、オブジェクトインスペクターパネルのフォームのCaptionプロパティをHelloWorldForm
からHello World!
に変更します。これらの文字列は、以下に示される例のイベントハンドラーと手続きコードで使用されているものと一致します。
コントロールの追加と設定
基本的なフォームが設定されたら、ツールパレットパネルにアクセスして、必要に応じてダイアログにコントロールを追加できます。ツールパレットは、Delphiのビジュアルコンポーネントライブラリに基づいており、ウィンドウコントロールの広範な範囲を提供するコンポーネントパレットで、コンポーネントカテゴリとして整理されています(詳細については、スクリプティンググラフィカルコンポーネントおよびコンポーネントカテゴリページを参照してください)。
ツールパレットのパネルセクションは、リージョン見出しのタブを使用して展開および折りたたむことができます。
パネルの上部にあるコントロール、カテゴリ名、右クリックメニューを使用して、パネル内のコントロールの表示を設定します:カテゴリの展開/折りたたみ、パレットアイテムの表示変更など。
「Hello World」プロジェクトのダイアログバージョンでは、フォームにDisplayとCloseの2つのボタンがあります。Standard領域のTool PaletteパネルでTButtonをクリックします。
これを2回行って、フォームに2つのボタンを配置します。1つのボタンは別のダイアログで「Hello World!」メッセージを表示するために使用され、もう1つのボタンはメインダイアログを閉じるために使用されます。
パネル内のすべてのコンポーネントには、関連する Properties、Methods、およびEventsがあります。
- Propertyは、オブジェクトの目に見える動作または操作に影響を与えるオブジェクトの特性です。たとえば、
Visible
プロパティは、スクリプト フォームでオブジェクトを表示できるかどうかを決定します。 - Methodは、常にオブジェクトに関連付けられている手続きであり、そのオブジェクトの振る舞いを定義します。
- Eventは、スクリプトによって検出されるアクションまたは発生です。スクリプトでは、プログラマーはマウスクリックなどの特定のイベントをキャプチャするように設計された各イベントハンドラーのためのコードを書きます。
コンポーネントのpropertiesとeventsは、配置後にObject Inspectorパネルを使用して調査および変更することができます。
Object Inspectorパネルを使用すると、2つのボタンの設定をデフォルトの名前やキャプションから変更することができます。
最初のボタンの名前をbDisplay
に、キャプションをDisplay
に設定してください。2番目のボタンの名前をbClose
に、キャプションをClose
に設定してください。これは、以下に示される例のイベントハンドラーコードに合わせるためです。
コンポーネントを選択し、Object Inspectorパネルでそのプロパティを編集します。
イベントハンドラのコードは、フォーム上のコントロールを直接参照することで構築できます。この例では、Displayボタンが既存のフォームの上にShowMessage
ダイアログを起動し、Closeボタンのアクションでこのフォームを閉じます。
イベントハンドラコード
Displayボタンをダブルクリックすると、コードビューでフォームが開き、そのイベントハンドラのスケルトンコードが作成されます。または、ボタンを選択してから、Object InspectorパネルのEventsタブをダブルクリックします。パネルでOnClick
イベントをダブルクリックすると、上記のようにコードビューが開きます。コードビュー内で、以下のリストに示すように、イベントハンドラにShowMessage
文を含めることができます。
Procedure
THelloWorldForm
.
bDisplayClick(Sender: TObject);
Begin
ShowMessage(
'Hello World!'
);
End;
スクリプトフォーム上の任意のコンポーネントに対して事前に定義されたイベントハンドラを表示するには、コンポーネントを選択し、次にオブジェクトインスペクターパネルのイベントタブをクリックします。 同様に、閉じるボタンのイベントハンドラは、Close
(フォーム)ステートメントを適用するOnClick
イベントを生成することによって定義できます:
Procedure
THelloWorldForm
.
bCloseClick(Sender: TObject);
Begin
Close;
End;
イベントハンドラが定義されたら、ソフトウェアからダイアログを呼び出す際の開始点として使用されるスクリプト内の手順が必要です。これはコードスクリプトの最後に追加されます。
フォーム名がHelloWorldFormで、手続き名がRunHelloWorldであることに注意してください。同じスクリプト内でフォーム名の衝突を避けるためには、ユニークなフォーム名を持つことが重要です。
Procedure RunHelloWorld;
Begin
HelloWorldForm.ShowModal;
End;
スクリプトは保存され、メインメニュー(File» Run Script)からRunHelloWorld
手続き項目を実行することにより、HelloWorldDialogエントリの下で実行できます。
あるいは、Run コマンド/ボタン () に手順を割り当てることができます。これは、Run » Set Startup Project Procedure メニューから設定します。
オブジェクトインスペクターパネルを使用すると、フォームユニットのプロパティやイベントを簡単に変更できます。たとえば、ワークスペース内のフォームの位置を変更するには、パネルを使用してフォームの位置プロパティのpoScreenCenter
値を変更します。スクリプトを実行すると、ダイアログはデスクトップ画面の中央に配置されます。
プロシージャの呼び出し
上記のように、プロジェクト内の任意のスクリプト(同じ言語セットを使用)は、グローバル変数や手続きにアクセスできるため、あるスクリプトの手続きがプロジェクト内の別のスクリプトの手続きを呼び出すことができます。 これは、HelloWorldの例プロジェクトに追加された`ShowAParametricMessage`コードセクションで示されます:
Procedure
ShowAParametricMessage(S :
String
);
Var
DefaultMessage;
Begin;
DefaultMessage :=
'Hello World!'
;
If
S =
''
Then
ShowMessage(DefaultMessage)
Else
ShowMessage(S);
End;
これにより、`ShowAParametricMessage`手続きに渡すことができる文字列変数`S`が確立されます。
渡された文字列は、ShowMessage
ダイアログ関数を使用して表示されますが、単純な If-Then-Else メソッドにより、文字列が空の場合はデフォルトの 'Hello World!' メッセージが表示されます。
これを実際に見るために、サンプルプロジェクト (HelloWorld.PrjScr
) を開き、以下に示すように、HelloWorldDialog スクリプト(HelloWorld スクリプトではない)に灰色でハイライトされた行を追加してください。
...
Procedure
THelloWorldForm
.
bDisplayClick(Sender: TObject);
Begin;
Showmessage(
'Hello World!'
);
End;
Procedure
THelloWorldForm
.
bCloseClick(Sender: TObject);
Begin;
ShowAParametricMessage(
'Goodbye World'
);
close;
End;
...
HelloWorldDialogスクリプトが実行され、Closeボタンがクリックされると、HelloWorldスクリプトからグローバルShowAParametricMessage
プロシージャが呼び出されます。
HelloWorldスクリプト内のパラメトリック手続きがHelloWorldDialogスクリプトから呼び出されます。
この呼び出しでは、「Goodbye World」というメッセージ文字列がShowAParametricMessage
手続きに渡され、その結果、フォームを閉じる前にクローズボタンをクリックするとこのメッセージが表示されます。
上記に示されたスクリプト呼び出しは、HelloWoldDialogフォームのクローズ手順に指定されたメッセージを挿入します。
渡された文字列パラメータが空の場合、`ShowAParametricMessage(''),` で定義されている通り、デフォルトの 'Hello World!' メッセージが表示されます。
スクリプトの記述とデバッグのプロセスを効率化するためのショートカットキーのリストについては、Script Editor Toolsページを参照してください。
コードエクスプローラーパネルを使用したスクリプト識別子の閲覧
Code Explorerパネルは、アクティブなスクリプトドキュメントで使用されているすべての識別子(変数、関数、および手続き)の視覚的な要約を提供します。
Code Explorerパネル
パネルに表示される識別子情報は、次のトップレベルフォルダーの下にグループ化されます:
-
手続き & 関数 – アクティブなスクリプトドキュメントで宣言されたすべての手続きと関数を含みます。各手続き/関数について、その手続き/関数に渡されたパラメーターや、その中でローカルに宣言された変数もリストアップされます。
-
変数 – アクティブなスクリプトドキュメントで宣言されたすべてのグローバル変数を含みます。
手続き/関数にローカル変数が宣言されている場合、それらはその手続き/関数の下にある変数サブフォルダにリストされます。さまざまな識別子を区別するために、ユニークなアイコンが使用されます:
|
プロシージャ |
|
関数 |
|
プロシージャ/関数のパラメータ |
|
変数(ローカルまたはグローバル) |
パネル内のエントリーをダブルクリックするか(または選択してEnterキーを押すと)、設計スペース内の対応するコード領域にジャンプします。