コンポーネント ウィザードによるコンポーネントの作成

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

新しいコンポーネントの作成 への移動


[コンポーネントの新規作成]ウィザードでは、コンポーネント作成の初期段階が簡単になります。 [コンポーネントの新規作成]ウィザードを使用するとき、次の値を指定(使用)する必要があります。

  • パーソナリティ(Delphi または C++)(Win32 はフレームワーク/プラットフォームに対して唯一の選択肢であることに注意)
  • コンポーネントの継承元になるクラス
  • 新規コンポーネントのクラス名
  • コンポーネントを表示する[ツール パレット]のカテゴリ
  • コンポーネントが作成されたユニットの名前
  • ユニットの検索範囲を示す検索パス
  • コンポーネントを配置するパッケージの名前

[コンポーネントの新規作成]ウィザードでは、コンポーネントを手動で作成したときと同様の処理が実行されます。

  • ユニットを作成する。
  • コンポーネントを派生させる。
  • コンポーネントを登録する。


新規コンポーネントを[コンポーネントの新規作成]ウィザードで追加するには:

  1. [コンポーネントの新規作成]ウィザードを開始するには、次の 2 つの方法のいずれかを選択します。
    • [コンポーネント|コンポーネントの新規作成...]を選択します。
    • [ファイル|新規作成|その他...]を選択し、[Delphi プロジェクト|Delphi ファイル]からのページで、[コンポーネント]をダブルクリックします。

    メモ: [ファイル|新規作成|その他...]で開始したウィザードでは、コンポーネントを既存のユニットに追加できません。 既存のユニットにはコンポーネントを手動で追加する必要があります。

  2. [コンポーネントの新規作成]ウィザードの各フィールドを入力します。
  3. [パーソナリティ、フレームワーク、およびプラットフォーム]ページで、作成するコンポーネントの種類(Delphi または C++)を選択します (IDE にプロジェクトが開いている場合、そのプロジェクトのパーソナリティが使用される)。
    • [継承元コンポーネント]ページで、新規コンポーネントに継承する元のクラスを選択します。
    • [コンポーネント]ページで、[クラス名]フィールドに、新しいコンポーネント クラスの名前を指定します。
    • [パレット ページ名]フィールドで、新しいコンポーネントをインストールする、[ツール パレット]のカテゴリを指定します。
    • [ユニット名]フィールドで、中にコンポーネント クラスを宣言するユニット名を指定します。 このユニットがデフォルトの検索パスにない場合、必要に応じて[検索パス]を編集します。
  4. [コンポーネントの新規作成]ウィザードの各フィールドを入力してから[完了]をクリックします。 新規または既存のパッケージにコンポーネントを配置するには、[コンポーネント|コンポーネントのインストール...]をクリックして、表示されるダイアログ ボックスで、パッケージを指定します。
  5. [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);
  }
}

トピック

関連項目