フォーム&コンポーネント

グラフィカルコンポーネントの概要

スクリプトシステムでは、ビジュアルコンポーネントと非ビジュアルコンポーネントの2種類のコンポーネントを扱います。

ビジュアルコンポーネントはユーザーインターフェースの構築に使用され、ノンビジュアルコンポーネントは、 TimerOpenDialog および MainMenu コンポーネントなど、さまざまなタスクに使用されます。

  • この Timer 非ビジュアルコンポーネントは、予定された間隔で特定のコードを起動するために使用でき、ユーザーには一切表示されません。
  • この ButtonEdit および Memo コンポーネントは視覚的コンポーネントです。

どちらのタイプのコンポーネントもデザイン時に表示されますが、非視覚コンポーネントは実行時には表示されません。 Tool Palette パネルにあるコンポーネントはオブジェクト指向であり、以下の3つの項目があります:

  • プロパティ
  • イベント
  • メソッド

A Property は、オブジェクトの可視的な動作または操作に影響を与えるオブジェクトの特性です。たとえば、Visibleプロパティは、スクリプトフォーム上でこのオブジェクトが表示されるかどうかを決定します。

イベント Event とは、スクリプトによって検出される動作や発生事象のことです。スクリプトでは、プログラマーは、マウスのクリックなどの特定のイベントを捕捉するように設計された各イベントハンドラに対してコードを記述します。

A Method とは、常にオブジェクトに関連付けられ、そのオブジェクトの挙動を定義するプロシージャのことです。

すべてのスクリプトフォームには、1つ以上のコンポーネントが含まれています。コンポーネントは通常、情報を表示したり、ユーザーが操作を実行できるようにしたりします。たとえば、 Label は静的なテキストを表示するために使用され、 Edit ボックスはユーザーがデータを入力できるようにするために使用され、 Button はアクションを開始するために使用できます。

フォーム上には任意のコンポーネントの組み合わせを配置することができ、スクリプトの実行中は、ユーザーがフォーム上のどのコンポーネントとも対話することができます。ユーザーがボタンをクリックしたり、 Edit ボックス内のテキストを変更した際に何が起こるかを決定するのは、プログラマーの役割です。

スクリプティング・システムは、スクリプト用の複雑なユーザー・インターフェースを作成するために使用できる多数のコンポーネントを提供しています。コンポーネントをフォームに配置するには、ツール・パレット・パネル上でそのアイコンを見つけ、ダブルクリックします。この操作により、アクティブなフォームにコンポーネントが配置されます。 ほとんどのコンポーネントの外観は、そのプロパティで設定されます。コンポーネントは最初はフォーム上のデフォルトの位置に配置されますが、必要に応じて位置を変更(ドラッグ)したり、サイズを変更(拡大・縮小)したりできます。また、後で Object Inspector パネルを使用して変更することも可能です。

コンポーネントをフォームにドロップすると、スクリプティングシステムが自動的にそのコンポーネントを使用するために必要なコードを生成し、スクリプトフォームを更新します。フォーム上のコンポーネントを機能させるには、プロパティを設定し、目的のメソッドを使用するためのイベントハンドラコードを実装するだけで済みます。

スクリプトフォームの設計

スクリプトフォームは、環境内でユーザーと対話するように設計されています。スクリプトフォームの設計は、ビジュアル開発の中核をなします。

実際には、すべてのコンポーネントはスクリプトフォーム上に配置され、設定された各プロパティは、関連するスクリプトコードと関連付けられたフォームを記述するファイル( *.DFM ファイル)に保存され、関連するスクリプトコード( *.PAS ファイル)と関連付けられています。すべてのスクリプトフォームに対して、 .PAS ファイルと、それに対応する .DFM ファイルが存在します。

スクリプトフォームとそのコンポーネントを操作する際は、 Object Inspector パネルを使用して、すべての要素のプロパティを確認・変更できます。コンポーネントを Shift キーを押しながらクリックするか、フォーム上のコンポーネントを囲むように選択矩形をドラッグすることで、複数のコンポーネントを選択できます。スクリプトフォームにはタイトル( Caption プロパティが Object Inspector )が設定されています。

新しいスクリプト・フォームの作成

スクリプト・プロジェクトを開いた状態で、 Projects パネル内のプロジェクトを右クリックし、 Add New to Project 項目をクリックし、 Delphi Script Form 項目を選択します。デフォルトの名前が EditScript1.pasというデフォルト名で新しいスクリプトフォームが開きます。

スクリプトフォームの表示

スクリプトには、スクリプトフォームが実行された際にフォームを表示するプロシージャが必要です。このプロシージャ内で、 ShowModal メソッドを呼び出すことができます。 Visible スクリプトフォームの ShowModal が正しく動作するためには、フォームのプロパティを false に設定する必要があります。

ShowModal example:

Procedure RunDialog;
Begin
  DialogForm.ShowModal;
End;

この ShowModal 例は、 RunDialog プロシージャが呼び出された際にスクリプトフォームを表示するための、非常にシンプルな手法です。なお、 DialogForm オブジェクトのコンポーネントには、 DialogForm.ShowModal メソッドが呼び出される前に、オブジェクトのコンポーネントに値を割り当てることができる点に注意してください。

以下に示す ModalResult プロパティの例は、以下に示すように、もう少し複雑です。スクリプト内の以下のメソッドは、スクリプトフォーム上のボタンに使用されます。これらのメソッドは、ユーザーが OK または Cancel のいずれかをクリックすると、ダイアログを終了させます。これにより、が返されます。 mrOk または mrCancelShowModal メソッドからそれぞれまたはを返します。

ModalResult Example:

Procedure TForm.OKButtonClick(Sender: TObject);
Begin
  ModalResult := mrOK;
End;

Procedure TForm.CancelButtonClick(Sender: TObject);
Begin
  ModalResult := mrCancel;
End;

Procedure RunShowModalExample;
Begin
  // Form's Visible property must be false for ShowModal to work correctly.
  If Form.ShowModal = mrOk Then ShowMessage('mrOk');
  If Form.ShowModal = mrCancel Then ShowMessage('mrCancel');
End;
また、 ModalResult 値を mrOk に設定することも可能です。 OK ボタンと mrCancel ボタンについてはに設定することも可能です。 Cancel ボタンについてはに設定することで、上記と同じ結果を得ることができます。

ユーザーがこのスクリプトフォーム上のいずれかのボタンをクリックすると、ダイアログボックスが閉じます。 Close メソッドを呼び出す必要はありません。 ModalResult メソッドが設定されていると、スクリプトエンジンが自動的にスクリプトフォームを閉じるため、このメソッドを呼び出す必要はありません。

なお、フォームの ModalResult をに設定したい場合は、 Cancel に設定したい場合は、 Esc キーを押したときにフォームのをに設定したい場合は、 Object Inspector パネルを使用して、[キャンセル]ボタンの Cancel プロパティをに設定するか、 Trueに設定するか、 Sender.Cancel := True をフォームのボタン CancelButtonClick イベントハンドラにを挿入します。

ユーザーからの入力の受け付け

ユーザーからの入力を受け付けることができる一般的なコンポーネントの一つに、 TEdit コンポーネントです。このコンポーネントには、ユーザーが文字列を入力できるフィールドがあります。なお、Delphiには他にも、 TMaskEditなど、他のDelphiコンポーネントも存在することに注意してください。これは、文字列として保存された入力マスクを持つ編集コンポーネントであり、これにより入力が制御またはフィルタリングされます。

以下の例は、ユーザーが編集ボックスに何かを入力した後、ボタンをクリックした際の処理を示しています。ユーザーが編集コンポーネントに何も入力しなかった場合(空白の場合)、イベントハンドラは警告メッセージを表示します。

Procedure TScriptForm.ButtonClick(Sender : TObject);
Begin
  If Edit1.Text = '' Then
  Begin
    ShowMessage('Warning - empty input!');
    Exit;
  End;
  // do something else for the input
End;

なお、ユーザーは Tab キーを使用するか、フォーム内の別のコントロールをクリックすることで、ダイアログの入力フォーカスを変更できることに注意してください。

イベントへの対応

フォームまたはコンポーネント上のボタンがクリックされると、スクリプティングシステムは Altium Designer からのイベント通知を受け取り、適切なイベントハンドラメソッドを呼び出すことで応答します。

See also
スクリプト コレクションの Scripts\DelphiScript Scripts\General\スクリプト コレクションのフォルダにある「HelloWorld」プロジェクト。
スクリプト コレクションの Scripts\DelphiScript Scripts\General\スクリプトコレクションのフォルダにある「ShowModal」サンプルスクリプト。

イベントハンドラの記述

フォームスクリプト内の各コンポーネントには一連のイベント名が設定されており、これらはスクリプトのイベントハンドラによって使用され、Altium Designer でのユーザーの操作に対してスクリプトがどのように反応するかを決定します。たとえば、ユーザーがフォーム上のボタンをクリックすると、Altium Designer はスクリプトにメッセージを送信し、スクリプトはこの新しいイベントに応答します。 OnClick ボタンのイベントが指定されている場合、それが実行されます。

イベントに応答するコードは通常、DelphiScriptのイベントハンドラに含まれており、すべてのコンポーネントには反応可能な一連のイベントが用意されています。例えば、クリック可能なすべてのコンポーネントには、 OnClick イベントを持っており、ユーザーがコンポーネントをクリックすると発火します。また、こうしたコンポーネントにはすべて、フォーカスの取得および喪失に対応するイベントも備わっています。ただし、 OnEnterOnExit のコードが指定されていない場合(OnEnter - コントロールがフォーカスを獲得した場合、 OnExit - コントロールがフォーカスを失った)が指定されていない場合、そのイベントはスクリプトによって無視されます。

要約すると、イベントとは、ボタンのクリックなどAltium Designer内で発生する事象と、その事象に応答するコードとの間の関連付けです。応答するコードはイベントハンドラと呼ばれます。このコードはプロパティの値を変更したり、メソッドを呼び出したりします。

コンポーネントのプロパティ

コンポーネントのプロパティ一覧を表示するには、コンポーネントを選択し、 Properties タブを開きます。 Object Inspector パネル内のタブを開きます。

コンポーネントのイベント

コンポーネントが反応できるイベントの一覧を表示するには、コンポーネントを選択し、 Events タブを開きます。イベント処理プロシージャを作成するには、コンポーネントが反応するイベントを選択し、イベント名をダブルクリックします。これにより、スクリ Object Inspector パネル内の[イベント]タブを開きます。イベント処理プロシージャを作成するには、コンポーネントが反応するイベントを選択し、イベント名をダブルクリックします。スクリプトシステムによって、イベントハンドラのフレームワークコードが自動的に挿入されます。

たとえば、 TButton パネルから Tool Palette パネルからコンポーネントを選択してスクリプトフォームにドロップし、その OnClick イベント名の横をダブルクリックします。 Object Inspector パネル内のイベント名の横をダブルクリックします。スクリプトシステムによってコードエディタがアクティブになり、 OnClick イベントのコードの骨格が生成されます。

ボタンに Close イベントハンドラにメソッドが定義されている場合、例えば、ボタンがクリックされると、そのボタンイベントハンドラがキャプチャされます。イベントハンドラ CloseClick イベントハンドラにメソッドが定義されている場合、ボタンがクリックされると、そのボタンイベントハンドラが OnClick イベントをキャプチャし、イベントハンドラ内のコードが実行されます。その結果、 Close メソッドによってスクリプトフォームが閉じられます。

要約すると、フォーム上で、あるいは Object Inspector パネルを使用してボタンコンポーネントを選択し、 Events ページからボタンコンポーネントを選択し、その OnClick イベントの右側をダブルクリックすると、スクリプト内に新しいイベントハンドラが表示されます。あるいは、ボタン自体をダブルクリックすると、スクリプトシステムがこの OnClick イベント用のハンドラを追加します。なお、他の種類のコンポーネントでは、デフォルトの動作が異なることに注意してください。

コンポーネントのメソッド

コンポーネントのメソッドの一覧を確認するには、「コンポーネントリファレンス」ドキュメントを参照してください。

スクリプトフォームへのコンポーネントの配置

ツールパレットパネルのコンポーネントをスクリプトで使用するには、スクリプトフォームが存在している必要があり、そのフォーム上にコンポーネントをドロップできます。通常、コンポーネントをスクリプトフォームにドロップしても、これらのオブジェクトを手動で作成または破棄する必要はありません。スクリプトフォームが自動的に処理を行います。

また、スクリプトシステムは、コンポーネントを使用するために必要なコードを自動的に生成し、スクリプトフォームを更新します。あとは、プロパティを設定し、イベントハンドラにコードを記述し、必要なメソッドを使用して、正常に動作するスクリプトフォームを実装するだけです。

スクリプト内でのコンポーネントの作成

スクリプト内では、 Nil パラメータを Constructor コンポーネントの``に``パラメータを渡すことで、スクリプト内でコンポーネントを直接作成または破棄できます。通常、フォームのハンドルを渡す必要はありません。スクリプトフォームが自動的に処理してくれるからです。たとえば、次のようにして Open および Save ダイアログ(TOpenDialog および(Embarcadero Delphi RTL の TSaveDialog クラス)のダイアログを生成・破棄できます。

スクリプトフォームのカスタマイズ

スクリプトフォームをカスタマイズする際の重要なポイントは次のとおりです:

  • フォームを他の開いているパネルの最前面に固定するには、 FormStyle プロパティを fsStayOnTopに設定します。
  • フォームのデフォルトの動作を定義するには、 FormKind を以下のいずれかの値に設定します。 fkNonefkNormalfkServerPanel または fkModalに設定します。
  • もし fkModal が閉じられている場合、そのフォームはモーダルフォームとなります。つまり、フォームを閉じるなどの操作を行う前に、ユーザーからの入力を待つことになります。もし fkServerPanel の場合、フォームはサーバーパネルとして表示されます。もし fkNormal の場合、フォームは通常の非モーダルフォームとして動作します。
  • フォームのデフォルトのスクロールバーを非表示にするには、 HorzScrollBar および VertScrollBar プロパティの値を変更します。
  • フォームをMDIフレームまたはMDI子にするには、 FormStyle プロパティを使用します。
  • フォームの境界線のスタイルを変更するには、 BorderIcons および BorderStyle プロパティを使用します(変更結果は実行時に反映されます)。
  • 最小化されたフォームのアイコンを変更するには、 Icon プロパティを使用します。
  • アプリケーションウィンドウ内でのフォームの初期位置を指定するには、 Position プロパティを使用します。
  • フォームの初期状態(最小化、最大化、通常など)を指定するには、 WindowState プロパティを使用します。
  • 実行時にフォームの作業領域を定義するには、 ClientHeight および ClientWidth プロパティを使用します(なお、 ClientHeight および ClientWidth はフォームの境界線内の領域を表します。 HeightWidth はフォームの領域全体を表します)。
  • 実行時に、フォーム内でどのコントロールに初期フォーカスを当てるかを指定するには、 ActiveControl プロパティを使用します。
  • 選択されているコントロールに関係なく、すべてのキーボードイベントをフォームに渡すには、 KeyPreview プロパティを使用します。
  • フォームに複数のメニューが含まれている場合、特定のメニューを指定するには、 Menu プロパティを使用します。

スクリプト・フォームおよびコンポーネントの更新

スクリプトフォームの表示が古くなってしまった場合(たとえば、コントロールが更新されたり再描画されたりしていない場合など)、コントロールがフリーズしたり破損したりしているように見えることがあります。これは、そのスクリプトによる負荷の高いバックグラウンド処理が原因である可能性があります。

スクリプト フォームの Update スクリプト・フォームの`Refresh()`メソッドや、 Tool Palette パネル内の多くのスクリプトコンポーネントには、フォームまたは特定のコントロールのグラフィカルな内容を更新する方法が用意されています。以下の例では、 Update メソッドを含む行は、以下の例で灰色で強調表示されています。

StatusBar component and its Update method Example:

Procedure TConverterForm.loadbuttonClick(Sender: TObject);
Begin
 If OpenPictureDialog1.Execute then
 Begin
 XPProgressBar1.Position := 0;
 XStatusBar1.SimpleText  := '  Loading...';
 XStatusBar1.Update;
 
 // loading a monochrome bitmap only
 Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
 
 // Check if image is monochrome, otherwise prompt a warning
 If Image1.Picture.Bitmap.PixelFormat > pf1bit Then
 Begin
 ShowWarning('The image is not a monochrome!');
 Close;
 End;
 
 lImageSize.Caption := IntToStr(Image1.Picture.Width) + ' x ' +
 IntToStr(Image1.Picture.Height) + ' mils';
 
 convertbutton.Enabled  := True;
 LoadButton.Enabled     := False;
 XStatusBar1.SimpleText := '  Ready...';
 XStatusBar1.Update;
 End;
End;

上記のコードスニペットは、 PCB Logo Creator スクリプトプロジェクトに由来するもので、これは Scripts\Delphiscript Scripts\Pcb\PCB Logo Creatorフォルダ内にあります。

AI-LocalizedAI で翻訳
問題が見つかった場合、文字/画像を選択し、Ctrl + Enter キーを押してフィードバックをお送りください。
機能の提供状況

ご利用可能な機能は、お使いのAltiumソリューション(Altium DevelopAltium Agile TeamsAltium Agile Enterprise、または有効な契約期間中のAltium Designer)によって異なります。

実際にお使いのソフトウェアに文書化されている機能が表示されない場合は、詳細についてAltium Sales までお問い合わせください。

従来のドキュメント

Altium Designer のドキュメントは、バージョンごとに掲載されなくなりました。Altium Designer の旧バージョンのドキュメントは、Other Installers ページの Legacy Documentation の項目をご覧ください。

Content