Delphi のオブジェクトの概要
新規プロジェクトを作成すると,IDE は新規フォームを表示してカスタマイズできるようにします。コードエディタで,自動生成されたユニットがこのフォームの新しいクラス型を宣言し,新規フォームインスタンスを作成するコードが生成されます。新規の Windows アプリケーションで生成されるコードの例を下に示します。
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm){ フォームの型宣言の始まり }
private
{ Private 宣言 }
public
{ Public 宣言 }
end;{ フォームの型宣言の終わり }
var
Form1: TForm1;
implementation{ 実装部の始まり }
{$R *.dfm}
end.{ 実装部とユニットの終わり}
上の例では,クラス型 TForm から新しい別のクラス型 TForm1 を派生させています。
前述のように,クラスはデータフィールドを持つという点でレコードと共通していますが,メソッドも持つという点でレコードと異なります。メソッドはオブジェクトのデータに作用するコードです。しかし,上の例で 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;{ 新しいデータフィールド }
procedure Button1Click(Sender: TObject);{ 新しいメソッドの宣言 }
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);{ 新しいメソッドのコード }
begin
Form1.Color := clGreen;
end;
end.
TForm1 に,フォームに追加したボタンを示すフィールド Button1 が挿入されています。TButton はクラス型なので,Button1 はオブジェクトを指しています。
IDE を使って記述するすべてのイベントハンドラは,フォームオブジェクトのメソッドです。イベントハンドラを作成するたびに,フォームオブジェクト型ではメソッドが宣言されます。TForm1 の型宣言内では,TForm1 型の新しいメソッドとして手続き Button1Click が宣言されています。ユニットの implementation 部には,Button1Click メソッドを実装するコードが挿入されています。
