RegisterComponents 手続きの使用
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 に読み込まれます。その結果、プロジェクトを開く際にエラー メッセージ表示され、作成したアプリケーションの実行時に実行時エラーが発生するおそれがあります。このような状況では、読み込まれていないこれらのコンポーネントが登録されているパッケージのスマート読み込みを明示的に無効にする必要があります。設計時パッケージのスマート読み込みを明示的に無効にするには、
このパッケージの 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;