コンポーネント ウィザードによるコンポーネントの作成
新しいコンポーネントの作成 への移動
[コンポーネントの新規作成]ウィザードでは、コンポーネント作成の初期段階が簡単になります。 [コンポーネントの新規作成]ウィザードを使用するとき、次の値を指定(使用)する必要があります。
- パーソナリティ(Delphi または C++)(Win32 はフレームワーク/プラットフォームに対して唯一の選択肢であることに注意)
- コンポーネントの継承元になるクラス
- 新規コンポーネントのクラス名
- コンポーネントを表示する[ツール パレット]のカテゴリ
- コンポーネントが作成されたユニットの名前
- ユニットの検索範囲を示す検索パス
- コンポーネントを配置するパッケージの名前
[コンポーネントの新規作成]ウィザードでは、コンポーネントを手動で作成したときと同様の処理が実行されます。
- ユニットを作成する。
- コンポーネントを派生させる。
- コンポーネントを登録する。
新規コンポーネントを[コンポーネントの新規作成]ウィザードで追加するには:
- [コンポーネントの新規作成]ウィザードを開始するには、次の 2 つの方法のいずれかを選択します。
- [コンポーネント|コンポーネントの新規作成...]を選択します。
- [ファイル|新規作成|その他...]を選択し、[Delphi プロジェクト|Delphi ファイル]からのページで、[コンポーネント]をダブルクリックします。
メモ: [ファイル|新規作成|その他...]で開始したウィザードでは、コンポーネントを既存のユニットに追加できません。 既存のユニットにはコンポーネントを手動で追加する必要があります。
- [コンポーネントの新規作成]ウィザードの各フィールドを入力します。
- [パーソナリティ、フレームワーク、およびプラットフォーム]ページで、作成するコンポーネントの種類(Delphi または C++)を選択します (IDE にプロジェクトが開いている場合、そのプロジェクトのパーソナリティが使用される)。
- [継承元コンポーネント]ページで、新規コンポーネントに継承する元のクラスを選択します。
- [コンポーネント]ページで、[クラス名]フィールドに、新しいコンポーネント クラスの名前を指定します。
- [パレット ページ名]フィールドで、新しいコンポーネントをインストールする、[ツール パレット]のカテゴリを指定します。
- [ユニット名]フィールドで、中にコンポーネント クラスを宣言するユニット名を指定します。 このユニットがデフォルトの検索パスにない場合、必要に応じて[検索パス]を編集します。
- [コンポーネントの新規作成]ウィザードの各フィールドを入力してから[完了]をクリックします。 新規または既存のパッケージにコンポーネントを配置するには、[コンポーネント|コンポーネントのインストール...]をクリックして、表示されるダイアログ ボックスで、パッケージを指定します。
- [OK] をクリックします。 新しいユニットが生成されます。
警告: 名前が "TCustom" で始まるクラス(TCustomControl など)からコンポーネントを継承する場合、元のコンポーネントにあるすべての抽象メソッドがオーバーライドされてから、新しいコンポーネントをフォームに配置します。 Delphi は、抽象プロパティやメソッドがあるクラスのインスタンス オブジェクトを作成できません。
クラス宣言とRegister 手続きを含む新しいユニットを Delphi に作成し、標準 Delphi ユニットをすべて含む uses 句を追加します。 ユニットのソース コードを確認するには、[表示|ユニット...]をクリックするか、[ファイル|開く]を選択してコード エディタにユニット ファイルを開きます。
ユニットは次のようになります。
unit MyControl; interface uses Windows, Messages, SysUtils, Types, Classes, Controls; type TMyControl = class(TCustomControl) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyControl]); end; end.
//header file #ifndef NewComponentH #define NewComponentH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class PACKAGE TNewComponent : public TComponent { private: protected: public: __fastcall TNewComponent(TComponent* Owner); __published: }; //--------------------------------------------------------------------------- #endif
//implementation file #include <vcl.h> #pragma hdrstop #include "NewComponent.h" #pragma package(smart_init); //--------------------------------------------------------------------------- // ValidCtrCheck is used to assure that the components created do not have // any pure virtual functions. // static inline void ValidCtrCheck(TNewComponent *) { new TNewComponent(NULL); } //--------------------------------------------------------------------------- __fastcall TNewComponent::TNewComponent(TComponent* Owner) : TComponent(Owner) { } //--------------------------------------------------------------------------- namespace Newcomponent { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TNewComponent)}; RegisterComponents("Samples", classes, 0); } }