RegisterComponents 手続きの使用

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

Register 手続きの記述 への移動

Register 手続きの中では、RegisterComponents を呼び出して、クラス配列引数 ComponentClasses で指定されたコンポーネントを登録します。RegisterComponents は、2 つのパラメータを取る手続きです。つまり、[ツール パレット]カテゴリの名前を指定する Page パラメータと、登録するコンポーネント クラスの配列を指定する ComponentClasses パラメータを取ります。

Page パラメータには、コンポーネントが表示される[ツール パレット]上のページ(カテゴリ)の名前を設定します。Page で指定されたカテゴリが既に存在する場合は、コンポーネントはそのカテゴリに追加されます。Page で指定されたカテゴリが存在しない場合は、その名前の新しい[ツール パレット]カテゴリが Delphi により作成されます。

カスタム コンポーネントを定義しているユニットで Register 手続きの実装から RegisterComponents を呼び出します。その次に、コンポーネントを定義しているユニットをコンパイルしてパッケージを作成し、そのパッケージをインストールすると、カスタム コンポーネントが[ツール パレット]に追加されます。

Delphi の場合

procedure Register;
begin
  RegisterComponents('System', [TSystem1, TSystem2]);      {add to system category}
  RegisterComponents('MyCustomPage',[TCustom1, TCustom2]); {new category}
end;

C++ の場合

namespace Newcomp
{
void __fastcall PACKAGE Register()
{
TMetaClass* classes[1] = {__classid(TMyComponent)};
RegisterComponents("Miscellaneous", classes, 0);
}
}
namespace Mycomps
{
 void __fastcall PACKAGE Register()
{
  //declares an array that holds two components
TMetaClass classes1[2] = {__classid(TFirst), __classid(TSecond)};
  //adds a new palette page with the two components in the classes1 array
RegisterComponents("Miscellaneous", classes1, 1);
  //declares a second array
TMetaClass classes2[1];
  //assigns a component to be the first element in the array
classes2[0]  = __classid(TThird);
  //adds the component in the classes2 array to the Samples page
RegisterComponents("Samples", classes2, 0);
}
}

パッケージに登録されたコンポーネントの読み込み状態の定義

IDE では、デフォルトで、IDE にインストールされている設計時パッケージのスマート(遅延)読み込みを使用します。この場合、最初は、開かれたプロジェクトで明示的に使用されている設計時パッケージ コンポーネントだけが IDE に読み込まれます。その結果、プロジェクトを開く際にエラー メッセージ表示され、作成したアプリケーションの実行時に実行時エラーが発生するおそれがあります。このような状況では、読み込まれていないこれらのコンポーネントが登録されているパッケージのスマート読み込みを明示的に無効にする必要があります。設計時パッケージのスマート読み込みを明示的に無効にするには、

ForceDemandLoadState(dlDisable)

このパッケージの Register 手続きの実装時に呼び出します。

たとえば、次のように記述できます。

Delphi の場合

procedure Register;
begin
  RegisterComponents('MyCustomPage',[TCustom1, TCustom2]); 
     {register custom components}
  ForceDemandLoadState(dlDisable);   
     {enforce always load in the IDE all component registered in this unit}
end;

関連項目