表示: Delphi C++
表示設定

VCL の概要

提供:RAD Studio
移動: 案内, 検索

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 の コンポーネント パレット に追加し、フォームで操作できます。

Delphi のコンポーネントは、標準のクラスより高度なカプセル化を実現します。 例として、ボタンを持つダイアログ ボックスについて考えましょう。VCL コンポーネントを使って開発された Windows プログラムの場合、ユーザーがボタンをクリックすると、システムが WM_LBUTTONDOWN というメッセージを生成します。 プログラムは、このメッセージを受け取り(一般には switch 文、メッセージ マップ、および応答テーブルにより受け取り)、メッセージに応答して実行されるルーチンに送ります。 Windows メッセージ(VCL アプリケーション)の大部分は、Delphi のコンポーネントによって処理されます。 メッセージまたはシステム イベントに応答する処理を行うには、イベント ハンドラを記述するだけで済みます。

イベントの利用

記述するコードのほとんどは、イベントに応じて直接または間接的に実行されます。イベントとは、実行時の出来事(大抵はユーザーのアクション)を表す、特殊なプロパティです。イベントに直接応答するコードは、「イベント ハンドラ」と呼ばれ、Delphi のプロシージャです。

オブジェクト インスペクタ[イベント]ページには、指定されたコンポーネントに対して定義されている、すべてのイベントが表示されます。オブジェクト インスペクタでイベントをダブルクリックすると、イベント処理プロシージャのスケルトンが生成され、ここに、そのイベントに応答するコードを埋めていくことができます。イベントが定義されていないコンポーネントもあります。

デフォルト イベントを持つコンポーネントもあり、このイベントはコンポーネントで最も一般的に処理が必要となるものです。たとえば、ボタンのデフォルト イベントは OnClick です。フォーム デザイナで、デフォルト イベントのあるコンポーネントをダブルクリックすると、そのデフォルト イベントのためのイベント処理プロシージャのスケルトンが生成されます。

複数のイベントに応答するイベント ハンドラを記述しておくと、コードを再利用することができます。たとえば、多くのアプリケーションでは、ドロップダウン メニュー コマンドに相当する、ショートカット ボタンを用意しています。ボタンがメニュー コマンドと同じアクションを実行する場合には、イベント ハンドラを 1 つ記述し、それを、ボタンとメニュー項目の両方の OnClick イベントに対して割り当てます。それには、オブジェクト インスペクタで、応答したい両方のイベントに対して、イベント ハンドラを設定してください。

これが、イベント ハンドラを再利用する、最も簡単な方法です。しかしながら、アクション リスト、および VCL のアクション バンドでは、ユーザーのコマンドに応答するコードを一元管理する、強力なツールが提供されています。アクション リストは、クロスプラットフォーム アプリケーションでも使用できますが、アクション バンドはできません。

コンポーネントのプロパティの設定|コンポーネントのプロパティを設定する

設計時に公開プロパティを設定するには、[オブジェクト インスペクタ]を使用できます。場合により、プロパティ エディタも使用できます。 実行時にプロパティを設定するには、アプリケーションのソース コードで値を指定します。

設計時にコンポーネントを選択すると、オブジェクト インスペクタは、それの公開されているプロパティを表示し、場合によっては、それらを変更することもできます。

複数のコンポーネントを選択した場合、オブジェクト インスペクタは、選択されたコンポーネントで共有されている、すべてのプロパティ(Name プロパティを除く)を表示します。選択コンポーネント間で、共有されたプロパティの値が異なっている場合、オブジェクト インスペクタは、デフォルト値か、最初に選択されたコンポーネントの値を表示します。共有されたプロパティを変更すると、そn変更は選択されているすべてのコンポーネントに対して適用されます。

オブジェクト インスペクタで、イベント ハンドラの名前など、コード関係のプロパティを変更すると、対応するソース コードが自動的に変更されます。逆に、フォーム クラスの宣言部でイベント ハンドラのメソッド名を変更するなど、ソース コードを変更すると、それは直ちにオブジェクト インスペクタに反映されます。

関連項目

他言語版