VCLコンポーネントの作り方
Delphiコンポーネントは、VCL(Visual Component Library)の一部となって、Delphiの機能を拡張します。Delphiコンポーネントは、設計時のユーザインフェースを持つDelphiのクラスの一つの形であるといえます。
Delphiコンポーネントプロジェクトを作成するには
- もし、フォームが表示されていたら、そのフォームをプロジェクトから解放しておきます。これは「プロジェクト/プロジェクトから削除」メニューによって行うことができます。
- 「ファイル/新規作成」を実行してリポジトリを表示させ、プロジェクトタブを選びます。
- 一覧から「コンポーネント」を選んでOKボタンを押します。
- コンポーネントウィザードが表示されるので、基底クラスとなる上位コンポーネントを選んで、作成するコンポーネントの名称を入力します。
- 「ユニットの作成」ボタンを押すと、作成するコンポーネントクラスのスケルトンコードがプロジェクトに追加されます。
- プロジェクトを適切な名前を付けてファイルに保存します。
メソッドを追加するには
- 宣言部のpublic部(published部でもよい)に、エディタでメソッド宣言を記述します。
- 実現部に、エディタでメソッドの本体を記述します。
例
public
procedure Write(A: Object);
procedure TMyControl.Write(A: Object);
begin
...
end;
プロパティを追加するには
- 宣言部のpublished部(に、エディタでプロパティ宣言を記述します。
- 実現部に、エディタでプロパティのreadメソッドとwriteメソッド(必要なとき)の本体を記述します。
例
type
TMyControl = class(TCustomControl)
...
published
property count: Integer read GetCount write SetCount;
function TMyControl.GetCount: Integer;
begin
.....
end;
procedure TMyControl.SetCount(v: Integer);
begin
....
end;
標準イベントを実装するには(コントロール)
- published部にプロパティとしてイベントを宣言します。
例
type
TMyControl = class(TCustomControl)
...
published
property OnClick;
end;
標準イベント処理を変更するには
- 標準処理を変更したいイベントをprotected部にオーバーライド宣言します。
- 実現部で、そのイベントメソッドのコードを具体的に記述します。
例
procedure Click; override; { forward 宣言 }
...
procedure TMyControl.Click;
begin
inherited Click; {ハンドラの呼び出しなど標準的な処理を実行 }
{ここにコンポーネント開発者のカスタマイズコードを記述 }
end;
コンストラクタを追加するには
- ふつう基底クラスのコンストラクタが初期化をおこなってくれますが、特別な処理を追加したいときは、コンストラクタを、宣言部のpublic部に追加します。
- コンストラクタの宣言はふつう次のようになります。
- コンストラクタを実現部に記述します。このときふつう、コンストラクタの最初で基底クラスのコンストラクタを呼び出します。
宣言部
constructor Create(AOwner: TComponent); override;
実現部
constructor TMyComponent.Create(AOwner: TComponent);
inherited Create(AOwner);
コンポーネントビットマップを変更するには
- 「ツール/イメージエディタ」を実行してイメージエディタを起動します。
- 「ファイル/新規作成/Delphiコンポーネントリソースファイル」を実行すると、空のDelphiリソースファイルが作成されます。
- 「リソース/新規作成/ビットマップ」を実行します。表示されたダイアログでビットマップのサイズを24 x 24にしてOKボタンを押します。
- Bitmap1がリストビューに追加されるので、コンポーネントのクラス名(すべて大文字)に変更します。そして、ダブルクリックしてビットマップを編集します。
- 「ファイル/名前を付けて保存」を実行して、リソースファイルをそのプロジェクトフォルダに保存します。ファイル名はユニットの名称と同じにします。
- コンパイル時に自動的にこのリソースが読み込まれて、ビットマップが組み込まれます。
例
ユニット名がMyControl、クラス名がTMyControlならファイル名がMYCONTROL.DCR、ビットマップ名がTMYCONTROLになります。
コンポーネントの外観を決めるには(TGraphicControlを継承している必要があります)
- 宣言部のprotected部にPaint手続きを宣言します。
- 実現部でPaint手続きの具体的なコードを記述します。
例
protected
procedure Paint; override;
procedure TMyControl.Paint;
begin
....
end;
-
コンポーネントをインストールするには
- 「コンポーネント/コンポーネントのインストール」を実行します。
- ファイル名や検索パスを確認して、OKボタンを押します。検索パスにプロジェクトのフォルダがあるか確認してください。なければ、追加してください。
- コンパイルを行ってインストールが行われます。コンパイルエラーがあるとコンポーネントパレットに追加されません。
- コンパイルエラーがあるときは、エラーがなくなるまで修正して、インストールをやり直してください。
- コンポーネントパレットにコンポーネントが追加されたことを確認します。