Die Prozedur RegisterComponents aufrufen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Die Register-Prozedur implementieren

Rufen Sie in der Prozedur Register die Prozedur RegisterComponents auf, um die Komponenten, die im Klassen-Array ComponentClasses angegeben sind, zu registrieren. RegisterComponents ist eine Prozedur, die zwei Parameter übernimmt: Den Parameter Page, der den Namen einer Kategorie der Tool-Palette angibt und den Parameter ComponentClasses, der das Array mit den zu registrierenden Komponentenklassen angibt.

Geben Sie im Parameter Page den Namen der Registerkarte (Kategorie) der Tool-Palette an, in der die Komponenten angezeigt werden sollen. Falls die Kategorie Page bereits vorhanden ist, werden die Komponenten in diese Kategorie eingefügt. Ist die Kategorie Page nicht vorhanden, erstellt Delphi eine neue Kategorie in der Tool-Palette mit dem angegebenen Namen.

Rufen Sie RegisterComponents in der Implementierung der Prozedur Register in einer der Units auf, in der die benutzerdefinierten Komponenten definiert sind. Die Units, in denen die Komponenten definiert sind, müssen anschließend in ein Package compiliert werden. Dieses Package muss installiert werden, bevor die Komponenten der Tool-Palette hinzugefügt werden.

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);
}
}

Festlegen des Ladestatus für in einem Package registrierte Komponenten

Standardmäßig verwendet die IDE das intelligente Laden (Lazy Loading) von in der IDE installierten Entwurfszeit-Packages. In diesem Fall lädt die IDE anfänglich nur die Komponenten der Entwurfszeit-Packages, die explizit in den geöffneten Projekten verwendet werden. Dies kann beim Öffnen eines Projekts zu Fehlermeldungen und beim Ausführen einer erzeugten Anwendung zu Laufzeitfehlern führen. In diesen Situationen müssen Sie das intelligente Laden eines Package explizit deaktivieren, in dem diese nicht geladenen Komponenten registriert sind. Rufen Sie zum Deaktivieren des intelligenten Ladens eines Entwurfszeit-Package

ForceDemandLoadState(dlDisable)

bei der Implementierung der Prozedur Register dieses Package auf.

Zum Beispiel können Sie Folgendes schreiben:

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;

Siehe auch