Delphi オブジェクトの概要

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

オブジェクトとは への移動


新規プロジェクトを作成すると、カスタマイズするための新規フォームが表示されます。コード エディタでは、自動生成されたユニットに、このフォームの新しいクラス型が宣言され、フォームの新規インスタンスを作成するコードが含まれています。新規 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 イベント ハンドラを記述するとしましょう。結果は次のようになります。

単純なフォーム

Green.jpg

ユーザーがボタンをクリックすると、フォームの色が緑色に変わります。ボタンの 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 セクションに追加されています。

関連項目