VCL の概要
VCL への移動
このセクションには次の項目が含まれています:
目次
VCL アーキテクチャ
VCL(Visual Component Library の頭文字)は、Delphi 言語で Windows アプリケーションのラピッド開発を行うためのビジュアル コンポーネントをまとめたものです。VCL には、ビジュアル クラス、非ビジュアル クラス、ユーティリティ クラスなど多様なクラスが含まれていて、これらのクラスを Windows アプリケーション、Web アプリケーション、データベース アプリケーション、コンソール アプリケーションの構築などの作業に使用できます。すべてのクラスが TObject の下位クラスです。TObject によって、作成、破棄、メッセージ処理などの基本動作を実装するメソッドが提供されます。
VCL コンポーネント
コンポーネントとは、コンポーネント ライブラリのうち TComponent クラスの下位クラスであるものを指します。設計時にコンポーネントをフォームやデータ モジュールに配置して、操作することができます。また、[オブジェクト インスペクタ]を使用すると、コードを記述しなくてもプロパティの値を設定できます。大部分のコンポーネントは、実行時に表示されるかどうかによって、ビジュアル コンポーネントと非ビジュアル コンポーネントに分類されます。一部のコンポーネントは[ツール パレット]に含められます。
ビジュアル コンポーネント
ビジュアル コンポーネント(TForm、TSpeedButton など)のことをコントロールと呼びます。コントロールは TControl の下位クラスです。コントロールは GUI アプリケーションで使われて、実行時にユーザーに表示されます。TControl によって、高さや幅など、コントロールのビジュアル属性を指定するプロパティが提供されます。
非ビジュアル コンポーネント
非ビジュアル コンポーネントはさまざまな作業に使われます。たとえばデータベースに接続するアプリケーションを作成する場合、フォームに TDataSource コンポーネントを配置して、あるコントロールと、そのコントロールが使用するデータセットとを接続できます。この接続はユーザーの目には見えないので、TDataSource は非ビジュアル コンポーネントです。設計時には、非ビジュアル コンポーネントはアイコンの形で表示されます。そのため、そのプロパティやイベントは、ビジュアル コンポーネントの場合と同様に操作できます。
その他の VCL クラス
コンポーネントではないクラス(つまり TObject の下位クラスのうち TComponent の下位クラスではないもの)も、さまざまな作業に使われます。これらのクラスは通常、システム オブジェクト(ファイルやクリップボードなど)へのアクセスや、一時的な作業(リストへのデータの格納など)に使用します。これらのクラスのインスタンスは、設計時には作成できません。ただし、フォーム デザイナで追加したコンポーネントによって作成されることはあります。
コンポーネントの利用
多くのコンポーネントは、IDE の[ツール パレット]から利用できます。[ツール パレット]でコンポーネントを選択し、フォームやデータ モジュールに配置します。ボタンやリスト ボックスなどのビジュアル コンポーネントをフォーム上に配置して、アプリケーションのユーザー インターフェイスを設計します。データ アクセス コンポーネントなどの非ビジュアル コンポーネントも、フォームやデータ モジュールに配置できます。一目見ただけでは、Delphi のコンポーネントは他のクラスと違いがありません。しかし、Delphi のコンポーネントと、多くのプログラマが扱う標準クラス階層との間には、いくつかの違いがあります。たとえば次のような違いです。
- Delphi のコンポーネントはすべて TComponent クラスの下位クラスです。
- コンポーネントは、多くの場合、そのままの形で使用されます。サブクラスを作成して機能を追加または変更するための基底クラスとして使われるのではなく、プロパティを介して変更されます。コンポーネントを継承するとしても、通常は、既存のイベント処理メンバ関数に特定のコードを追加することが目的です。
- コンポーネントを割り当てられる先はヒープだけです。スタックには割り当てられません。
- コンポーネントのプロパティには、実行時型情報が含まれます。
- コンポーネントは、IDE の[ツール パレット]に追加し、フォームで操作できます。
コンポーネントは、多くの場合、標準クラスによく見られるものよりも高度なカプセル化を実現します。たとえば、ボタンを持つダイアログ ボックスを考えてください。VCL コンポーネントを使って開発された Windows プログラムの場合、ユーザーがボタンをクリックすると、システムは WM_LBUTTONDOWN というメッセージを生成します。プログラムでは、このメッセージを(一般には switch 文、メッセージ マップ、または応答テーブルで)捕捉し、メッセージに応答して動作するルーチンに送信しなければなりません。Windows メッセージ(VCL アプリケーション)の大部分は、Delphi コンポーネントによって処理されます。イベント ハンドラさえ記述すれば、メッセージまたはシステム イベントに応答する処理を行うことができます。
イベントの利用
記述するコードのほとんどは、直接または間接にイベントに応答して実行されます。イベントとは、実行時の出来事(たいていはユーザーのアクション)を表す特殊なプロパティです。イベントに直接応答するコード(イベント ハンドラと呼ばれます)は、Delphi の手続きです。
[オブジェクト インスペクタ]の[イベント]タブには、そのコンポーネントに定義されているすべてのイベントが表示されます。[オブジェクト インスペクタ]でイベントをダブルクリックするとイベント処理手続きのスケルトンが生成されるので、その中にイベントに応答するコードを記述することができます。すべてのコンポーネントにイベントが定義されているわけではありません。
一部のコンポーネントにはデフォルト イベントがあります。これは、そのコンポーネントで最も一般的に処理が必要になるものです。たとえば、ボタンのデフォルト イベントは OnClick です。デフォルト イベントを持つコンポーネントをフォーム デザイナでダブルクリックすると、デフォルト イベントのイベント処理手続きのスケルトンが生成されます。
複数のイベントに応答するイベント ハンドラを記述しておくと、コードを再利用することができます。たとえば、多くのアプリケーションでは、ドロップダウン メニュー コマンドに相当するスピード ボタンが提供されます。ボタンがメニュー コマンドと同じアクションを実行する場合には、イベント ハンドラを 1 つ記述し、それを、ボタンとメニュー項目の両方の OnClick イベントに割り当てます。それには、[オブジェクト インスペクタ]で、応答したい両方のイベントに対して、そのイベント ハンドラを設定します。
これが、イベント ハンドラを再利用する最も簡単な方法です。ただし、アクション リストや VCL のアクション バンドでは、ユーザーのコマンドに応答するコードを一元管理する、強力なツールが提供されています。
コンポーネントのプロパティの設定
公開されたプロパティを設計時に設定するには、[オブジェクト インスペクタ]を使用できます。また、プロパティ エディタを使用できる場合もあります。プロパティを実行時に設定するには、アプリケーションのソース コードで値を割り当てます。
設計時にフォーム上でコンポーネントを選択すると、その公開されたプロパティが[オブジェクト インスペクタ]に表示され、可能な場合には編集することができます。
複数のコンポーネントを選択すると、選択されたコンポーネントに共通するすべてのプロパティ(Name
を除く)が[オブジェクト インスペクタ]に表示されます。共通のプロパティの値が、選択したコンポーネント間で異なっている場合、[オブジェクト インスペクタ]には、デフォルト値か最初に選択されたコンポーネントの値が表示されます。共通のプロパティを変更すると、その変更は選択されているすべてのコンポーネントに適用されます。
イベント ハンドラの名前など、コードに関係するプロパティを[オブジェクト インスペクタ]で変更すると、対応するソース コードも自動的に変更されます。さらに、フォームのクラス宣言でイベント ハンドラのメソッド名を変更するなど、ソース コードを変更すると、その変更はすぐに[オブジェクト インスペクタ]にも反映されます。