[Lazarus] Registering a TFrame to component palette

Michael Van Canneyt michael at freepascal.org
Sun Jun 13 21:04:31 CEST 2021



On Sun, 13 Jun 2021, Sven Barth wrote:

> Michael Van Canneyt <michael at freepascal.org> schrieb am So., 13. Juni 2021,
> 13:53:
>
>>
>>
>> On Sun, 13 Jun 2021, Sven Barth via lazarus wrote:
>>
>>> Am 11.06.2021 um 23:48 schrieb Juha Manninen via lazarus:
>>>> Regarding issue : https://bugs.freepascal.org/view.php?id=28450
>>>> <https://bugs.freepascal.org/view.php?id=28450>
>>>>
>>>> The parameter passed to function RegisterComponents() is
>> TComponentClass
>>>> which means "class of TComponent". It is only type information and does
>> not
>>>> carry information about sub-components.
>>>> Could somebody please explain how it works in Delphi. Does this really
>> work
>>>> :
>>>>   RegisterComponents('Sample', [TMyFrame]);
>>>
>>> Yes, it does work this way. I don't know what you mean with "information
>>> about sub-components". The VMT vFieldTable entry contains all published
>>> fields of the class and thus all the sub controls that are visible
>> through
>>> the RTTI and thus for the designer. If the IDE does not use that yet,
>> then it
>>> definitly should.
>>>
>>>> I added a comment to the report but it is old and the reporter may not
>> read
>>>> it.
>>>> Maybe there should be a new function RegisterFrame() or similar?
>>>
>>> There is no need to add anything, because the necessary information is
>>> already there. It's just that the IDE doesn't use it yet.
>>
>> In Delphi, the above also does not work, you need special handling for
>> frames, just as for forms.
>>
>
> You think I didn't test it before writing? I created a frame, added it to a
> package, added a Register procedure, installed the package, started a new
> VCL application and added that frame to the form from the component
> palette. I had added a button and a combo box and both were visible in the
> designer.

I think there was a misunderstanding. You want to place a frame on a
form, just like a component.

I confused this with actually creating custom forms.

I have always used (since D7) a special designer call for this.

With (BorlandIDEServices As IOTAModuleServices) Do
   CreateModule(TMKFormWizardModuleCreator.Create(FBaseClass, FClause,FUseInherited) As IOTACreator);

Michael.


More information about the lazarus mailing list