Hi,
I am migrating a Delphi system to Lazarus.
Each object of the system is represented in a TFrame.
The declaration of TSystemObject (base object/frame) is:
{$ifdef BASE_SYSTEMOBJECT_ON_OBJECT}
TSystemObject = class(TObject)
{$else}
TSystemObject = class(TFrame)
{$endif}
public
constructor Create(AOwner : {$ifdef
BASE_SYSTEMOBJECT_ON_OBJECT}TObject{$else}TComponent{$endif}); {$ifdef
BASE_SYSTEMOBJECT_ON_OBJECT}virtual;{$endif}
constructor CreateObject(aOwner : {$ifdef
BASE_SYSTEMOBJECT_ON_OBJECT}TObject{$else}TComponent{$endif}{; const
aSystemData : TSystemData = nil}); virtual;
end;The conditional BASE_SYSTEMOBJECT_ON_OBJECT make it act as a frame at design time, and as a at runtime I create the
designed frame by code when required.
In Delphi (any version) it works. In Lazarus, I can not see the components at design time (I don't know at runtime because I did not finished the porting and does not compile yet).
I registered it with
FormEditingHook.RegisterDesignerBaseClass(TSystemObject); The registration went well! I installed the package ok. The properties of the TSystemObject are on the object inspector as expected.
When I open a unit with a SystemObject created in Delphi, it opens, but the components inside it (in the frame) are not rendered at design time. I can select them with a mouse clic, and the properties of them are ok in the object inspector, but the component is not visible on the form. Even if I add a TButton, it is not visible.
What could be wrong?
Using .dfm in place of .lfm could be a problem?
Then I changed the base class to TForm (in place of TFrame), and registered it as in the custom form example with
RegisterCustomForm(TSystemObject,'SystemObject');
This worked as it appears in the new menu dialog. How to do this with TFrame?
Thank you!
Horacio Jamilis
Buenos Aires, Argentina
