VBScriptフォームコンポーネントの使用
VBScriptフォームでコンポーネントを使用する
フォームとコンポーネントはEmbarcadero Delphi™のVisual Component Library(VCL)をベースにしていますが、VBScriptを使用する場合でも、フォーム上にコントロールを配置するためにAltium DesignerのDelphiベースのTool Paletteが引き続き使用されます。また、Altium Designerにおけるフォーム/コンポーネントのDelphi由来に関係なく、イベントハンドラは生成され、コードはVBScript言語で記述されます。
コンポーネント概要
スクリプティングシステムは2種類のコンポーネントを扱います。ビジュアル(Visual)コンポーネントと非ビジュアル(Non-visual)コンポーネントです。ビジュアルコンポーネントはユーザーインターフェースの構築に使用され、非ビジュアルコンポーネントは、Timer、OpenDialog、MainMenuコンポーネントが提供する機能のように、さまざまなタスクに使用されます。たとえば、非ビジュアルのTimerコンポーネントは、スケジュールされた間隔で特定のコードを起動するために使用され、ユーザーの目に触れることはありません。Button、Edit、Memoコンポーネントはビジュアルコンポーネントであり、ユーザーに表示されます。
どちらのタイプのコンポーネントも設計時には表示されますが、非ビジュアルコンポーネントは実行時には表示されません。Tool Paletteパネルのコンポーネントはオブジェクト指向で、次の3項目を備えています。
- プロパティ
- イベント
- メソッド
propertyは、オブジェクトの可視的な振る舞い、またはこのオブジェクトの動作に影響を与える特性です。たとえば、Visibleプロパティは、このオブジェクトがスクリプトフォーム上で表示されるかどうかを決定します。
eventは、スクリプトによって検出されるアクションまたは発生事象です。スクリプトでは、プログラマが各イベントハンドラに対してコードを書きます。イベントハンドラは、マウスクリックなどの特定のイベントを捕捉するように設計されています。
methodは、常にオブジェクトに関連付けられる手続きであり、そのオブジェクトの振る舞いを定義します。
すべてのスクリプトフォームには1つ以上のコンポーネントがあります。コンポーネントは通常、情報を表示したり、ユーザーがアクションを実行できるようにしたりします。たとえば、Labelは固定テキストの表示に使用され、Editボックスはユーザーがデータを入力できるようにするために使用され、Buttonはアクションの開始に使用できます。
任意の組み合わせのコンポーネントをフォーム上に配置でき、スクリプト実行中(実行時)にユーザーがそれらと対話できます。ユーザーがボタンをクリックしたとき、またはEditボックス内のテキストを変更したときに何が起こるかを決めるのは、スクリプトプログラマの役割です。
スクリプティングシステムは、スクリプト向けにシンプルまたは複雑なユーザーインターフェースを作成するための各種コンポーネントを提供します。フォーム上に配置できるすべてのコンポーネントは、Tool Paletteパネルにあります。
フォームにコンポーネントを配置するには、Tool Paletteパネル上でそのアイコンを見つけてダブルクリックします。この操作により、アクティブなフォーム上の既定位置に、既定の幅と高さでコンポーネントが配置されます。多くのコンポーネントの見た目は、関連付けられたプロパティの設定によって決まります。
配置されたコンポーネントは、既定の位置と幅・高さのまま、マウス操作またはObject Inspectorパネルを通じてサイズ変更や再配置ができます。コンポーネントをフォームにドロップすると、スクリプティングシステムはコンポーネントを使用するために必要な基本コードを自動生成し、スクリプトフォームを更新します。フォーム上でコンポーネントを動作させるために残る作業は、プロパティの設定、イベントハンドラへのコード記述、必要に応じたメソッドの使用だけです。
スクリプトフォームの設計
スクリプトフォームは、Altium Designer環境内でユーザーと対話するために設計されます。スクリプトフォームの設計は、Altium Designerにおけるビジュアル開発の中核です。
スクリプトフォーム上に配置された各コンポーネントと、設定されたすべてのプロパティは、フォームを記述するファイル(*.dfmファイル)に保存され、関連するスクリプトコード(*.vbsファイル)と関係を持ちます。したがって、各スクリプトフォームには*.vbsファイルと、それに対応する*.dfmファイルがあります。
スクリプトフォームとそのコンポーネントを扱う際、プロパティはObject Inspectorパネルから参照・変更できます。複数のコンポーネントは、Shiftを押しながらクリックするか、スクリプトフォーム上で選択矩形をドラッグして囲むことで選択できます。スクリプトフォームのタイトルは、Object InspectorパネルのCaptionプロパティにマップされています。
新しいスクリプトフォームの作成
スクリプトプロジェクトを開いた状態で、Projectsパネル内のプロジェクトを右クリックし、コンテキストメニューからAdd New to Project、続いてVB Script Formを選択します。既定のEditScript1.vbs nameで新しいスクリプトフォームが作成されます。別の方法として、*.PrjPCBプロジェクトでは、File » New » Script Files » VB Script Formコマンドを選択します。
スクリプトフォームの表示
スクリプトフォームがAltium Designerで実行されたときにフォームを表示するには、スクリプト側にフォームを表示するルーチンが必要です。このルーチン内で、フォームに対してShowModalメソッドを呼び出します。ShowModalメソッドが正しく動作するように、フォームのVisibleプロパティはfalse(未チェック)に設定する必要があります。
ShowModalの例
Sub RunDialog
DialogForm.ShowModal
End Sub
上記のShowModal例は、スクリプトからRunDialogダイアログが呼び出されたときにスクリプトフォームを表示する簡単な方法です。DialogForm.ShowModalメソッドを呼び出す前に、DialogFormオブジェクトのコンポーネントへ値を代入できる点に注意してください。
以下に示すModalResult例はより複雑です。後半のメソッドはスクリプトフォーム内のボタンに使用されます。これらのスクリプトメソッドにより、ユーザーがOKまたはCancelボタンのいずれかをクリックするとダイアログが終了し、ShowModalメソッドからそれぞれmrOkまたはmrCancelが返されます。
ModalResult Example
sub bOKButtonClick(Sender)
ModalResult := mrOK
end sub
sub bCancelButtonClick(Sender)
ModalResult := mrCancel
end sub
sub RunShowModalExample
'Form Visible property must be false for ShowModal to work properly.
If Form.ShowModal = mrOk Then ShowMessage("mrOk")
If Form.ShowModal = mrCancel Then ShowMessage("mrCancel")
end sub
上記と同じことは、イベントハンドラ内でOKボタンのModalResult値をmrOkに、CancelボタンのModalResult値をmrCancelに設定することでも実現できます。ユーザーがいずれかのボタンをクリックするとダイアログボックスは閉じます。ModalResultメソッドが設定されるとスクリプトエンジンが自動的にスクリプトフォームを閉じるため、Closeメソッドを呼び出す必要はありません。
ユーザーがEscキーを押したときにフォームのModalResultをキャンセルに設定するには、Object InspectorパネルでCancelボタンのCancelプロパティをtrue(チェック)に設定するか、フォームのボタンCancelButtonClickイベントハンドラにSender.Cancel := Trueを挿入します。
ユーザー入力の受け付け
ユーザーからの入力を受け付けられる一般的なコンポーネントの1つがEditBoxコンポーネントです。このEditBoxコンポーネントにはテキストフィールドがあり、ユーザーは文字列を入力できます。入力可能なコンポーネントには他にも、入力マスク付きのテキストフィールドを持つマスク付き編集コンポーネントなどがあります。マスクは入力を制御(またはフィルタ)し、パラメータ文字列に保存されます。
以下の例は、ユーザーがEditボックスにテキストを入力した後にボタンをクリックすると何が起こるかを示しています。ユーザーがEditコンポーネントに何も入力しなかった場合、イベントハンドラは警告メッセージで応答する点に注意してください。
sub TScriptForm.ButtonClick(Sender)
If Edit1.Text = "" Then
ShowMessage("Warning - empty input!")
Exit
End
' do something else for the input
End sub
また、ユーザーはTabキーを使用するか、別のフォームコントロールをクリックすることで、フォーム上の入力フォーカスを移動できます。
イベントへの応答
フォームまたはコンポーネントがユーザーに選択されると、Altium Designerはスクリプティングシステムへメッセージを送信し、スクリプティングシステムはイベント通知に応答して適切なイベントハンドラメソッドを呼び出します。
イベントハンドラの記述
スクリプトは、実行時にコンポーネントに対して発生し得るイベントに応答する必要がある場合があります。イベントとは、ボタンのクリックなどAltium Designer内での発生事象と、その事象に応答するコード片を結び付けるリンクです。応答するコードがイベントハンドラであり、プロパティ値を変更し、メソッドを呼び出します。
各コンポーネントにはプロパティに加えて、イベント名のセットがあります。スクリプトプログラマは、Altium Designer上でのユーザー操作に対してどのように反応するかを決定します。たとえば、ユーザーがフォーム上のボタンをクリックすると、Altium Designerはスクリプトへメッセージを送信し、スクリプトはこの新しいイベントに反応します。ボタンのOnClickイベントが指定されていれば、それが実行されます。
これらのコンポーネントには、フォーカスの取得と喪失のためのイベントもあります。ただし、OnEnterおよびOnExitのコードが指定されていない場合(OnEnter - コントロールがフォーカスを持つ、OnExit - コントロールがフォーカスを失う)、そのイベントはスクリプトによって無視されます。
コンポーネントのプロパティ
コンポーネントのプロパティ一覧を表示するには、コンポーネントを選択し、Object InspectorパネルのPropertiesタブを有効にします。
コンポーネントのイベント
コンポーネントが反応できるイベント一覧を表示するには、コンポーネントを選択し、Object InspectorパネルのEventsタブを有効にします。コンポーネントが反応するためのイベント処理手続きを作成するには、適切なイベントを選び、その名前をダブルクリックします。
たとえば、Tool PaletteパネルからButton1コンポーネントを選択してスクリプトフォームにドロップし、OnClickイベント名の横をダブルクリックします。スクリプティングシステムはコードエディタへフォーカスを移し、OnClickイベント用のひな形コードが作成されます。ボタンのCloseClickイベントハンドラにCloseメソッドがある場合、ボタンがクリックされるとイベントハンドラがクリックイベントを捕捉し、イベントハンドラ内のコードが実行されます。つまり、Closeメソッドがスクリプトフォームを閉じます。
まとめると、イベントハンドラは、フォーム上(またはObject Inspectorパネル)でコンポーネントを選択し、InspectorのEventsタブで目的のイベント(例:OnClick)の右側をダブルクリックすることでスクリプト内に作成され、適切なコードの枠組みがスクリプトに表示されます。
別の方法として、ボタンをダブルクリックすると、スクリプティングシステムはOnClickイベントのハンドラを追加します。他の種類のコンポーネントでは、既定のアクションはまったく異なります。
コンポーネントのメソッド
コンポーネントのメソッド一覧についてはComponent Referenceを参照し、より詳細な情報についてはEmbarcadero Delphiのドキュメントを参照してください。
実行時にコンポーネントを作成する
スクリプト内で、コンポーネントを直接作成および破棄できます。通常、フォームのハンドルを渡す必要はありません。スクリプトフォームが自動的に処理するためです。代わりに、コンポーネントのコンストラクタに Nil パラメータを渡します。
たとえば、Open および Save ダイアログは作成・破棄できます(Delphi RTL の一部である TOpenDialog および TSaveDialog クラス)。