Delphi オブジェクトの概要
オブジェクトとは への移動
新規プロジェクトを作成すると、カスタマイズするための新規フォームが表示されます。コード エディタでは、自動生成されたユニットに、このフォームの新しいクラス型が宣言され、フォームの新規インスタンスを作成するコードが含まれています。新規 Windows アプリケーションの場合は、たとえば次のようなコードが生成されます。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm){ The type declaration of the form begins here } private { Private declarations } public { Public declarations } end;{ The type declaration of the form ends here } var Form1: TForm1; implementation{ Beginning of implementation part } {$R *.dfm} end.{ End of implementation part and unit}
新しいクラス型は TForm1 で、やはりクラスである TForm 型から派生しています。
クラスはデータ フィールドを含んでいるという点でレコードと似ていますが、クラスはメソッド(オブジェクトのデータに作用するコード)も含んでいます。これまでのところ、TForm1 にはデータ フィールドもメソッドも含まれていないように見えますが、これは、まだフォームにコンポーネント(新規オブジェクトのフィールド)を追加しておらず、イベント ハンドラ(新規オブジェクトのメソッド)も作成していないためです。たとえ型宣言には示されていなくても、TForm1 には、継承したデータ フィールドとメソッドが含まれています。
この変数宣言では、新しい TForm1 型の変数として Form1 を宣言しています。
var Form1: TForm1;
Form1 は、クラス型 TForm1 のインスタンス(オブジェクト)を表します。あるクラス型の複数のインスタンスを宣言することもできます。その必要があるのは、たとえば、MDI(マルチ ドキュメント インターフェイス)アプリケーションで複数の子ウィンドウを作成する場合などです。その場合、インスタンスごとに独自のデータを保持していますが、すべてのインスタンスで同じコードを使用してメソッドを実行します。
フォームには、まだ何もコンポーネントを追加しておらず、コードも記述してはいませんが、コンパイルして実行できる完全な GUI アプリケーションが既にできあがっています。現時点では、空のフォームを表示するだけのアプリケーションです。
このフォームにボタン コンポーネントを追加し、そのボタンをユーザーがクリックしたときにフォームの色を変更する OnClick イベント ハンドラを記述するとしましょう。結果は次のようになります。
単純なフォーム
ユーザーがボタンをクリックすると、フォームの色が緑色に変わります。ボタンの OnClick イベントのイベント ハンドラ コードは次のとおりです。
procedure TForm1.Button1Click(Sender: TObject); begin Form1.Color := clGreen; end;
オブジェクトの中に、他のオブジェクトをデータ フィールドとして含めることができます。フォームにコンポーネントを配置するたびに、フォームの型宣言に新しいフィールドが追加されます。上記のアプリケーションを作成して、コード エディタを開くと、次のようなコードになっています。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton;{ New data field } procedure Button1Click(Sender: TObject);{ New method declaration } private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);{ The code of the new method } begin Form1.Color := clGreen; end; end.
TForm1 には、フォームに追加したボタンに対応する Button1 フィールドがあります。TButton はクラス型であるため、Button1 はオブジェクトを参照しています。
IDE を使って記述するイベント ハンドラはすべて、フォーム オブジェクトのメソッドです。イベント ハンドラを作成するたびに、フォーム オブジェクト型にメソッドが宣言されます。これで、TForm1 型には新しいメソッド Button1Click 手続きが含まれるようになり、そのメソッドは TForm1 の型宣言で宣言されています。Button1Click メソッドを実装するコードが、ユニットの implementation セクションに追加されています。