Wie ist es möglich ein Komponente zu erzeugen die verschachtelte Definitionen hat. Wie z. B. Table.Fielddefs Tmainmenu.Menuitem usw.
Der Versuch es bei TmainMenu abzugucken ist gescheitert.
Hier mal der Code. Auf Funktionen etc. wurde erstmal absichtlich verzichtet. Ausgeklammerte Codezeilen entsprechen verschiedenen Lösungsansätzen die nicht viel gebracht haben.
<pre>
unit RegContainer;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Registry;
type
TValueTyp = (vtString, vtInteger, vtBoolean);
type
TRegDefs = class(TComponent)
private
FValueTyp : TValueTyp;
FCheck : Boolean;
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
// constructor Create(AOwner: TComponent); override;
{ Public-Deklarationen }
published
property Valuetyp : TValueTyp read FValueTyp write FValueTyp;
property Check : Boolean read FCheck write FCheck default True;
{ Published-Deklarationen }
end;
{TRegColection}
type
TRootkey = (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE,
HKEY_USERS, HKEY_PERFORMANCE_DATA, HKEY_CURRENT_CONFIG,
HKEY_DYN_DATA);
//type
// TRegDefsList = Array of TRegDefs;
type
TRegcolection = class(TComponent)
private
FRootkey : TRootkey;
FRegkeyCount : Integer;
FRegkey : TRegDefs;//TRegDefsList;
FRegistry : TRegistry;
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
//constructor Create(AOwner: TComponent); override;
{ Public-Deklarationen }
published
property Rootkey : TRootkey read fRootkey write fRootkey;
property Regdefs : TRegDefs read fRegkey write fRegkey;
{ Published-Deklarationen }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Beispiele', [TRegcolection]);
end;
{ TRegDef }
{constructor TRegDefs.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;}
{ TRegcolection }
{constructor TRegcolection.Create(AOwner: TComponent);
begin
FRegkey := TRegDefs.Create(self)
end;}
end.
</pre>
Der Versuch es bei TmainMenu abzugucken ist gescheitert.
Hier mal der Code. Auf Funktionen etc. wurde erstmal absichtlich verzichtet. Ausgeklammerte Codezeilen entsprechen verschiedenen Lösungsansätzen die nicht viel gebracht haben.
<pre>
unit RegContainer;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Registry;
type
TValueTyp = (vtString, vtInteger, vtBoolean);
type
TRegDefs = class(TComponent)
private
FValueTyp : TValueTyp;
FCheck : Boolean;
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
// constructor Create(AOwner: TComponent); override;
{ Public-Deklarationen }
published
property Valuetyp : TValueTyp read FValueTyp write FValueTyp;
property Check : Boolean read FCheck write FCheck default True;
{ Published-Deklarationen }
end;
{TRegColection}
type
TRootkey = (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE,
HKEY_USERS, HKEY_PERFORMANCE_DATA, HKEY_CURRENT_CONFIG,
HKEY_DYN_DATA);
//type
// TRegDefsList = Array of TRegDefs;
type
TRegcolection = class(TComponent)
private
FRootkey : TRootkey;
FRegkeyCount : Integer;
FRegkey : TRegDefs;//TRegDefsList;
FRegistry : TRegistry;
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
//constructor Create(AOwner: TComponent); override;
{ Public-Deklarationen }
published
property Rootkey : TRootkey read fRootkey write fRootkey;
property Regdefs : TRegDefs read fRegkey write fRegkey;
{ Published-Deklarationen }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Beispiele', [TRegcolection]);
end;
{ TRegDef }
{constructor TRegDefs.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;}
{ TRegcolection }
{constructor TRegcolection.Create(AOwner: TComponent);
begin
FRegkey := TRegDefs.Create(self)
end;}
end.
</pre>
Comment