[Lazarus] How to clone a component
patspiper
patspiper at gmail.com
Thu Oct 4 14:08:31 CEST 2012
On 04/10/12 10:45, patspiper wrote:
> On 04/10/12 09:57, patspiper wrote:
>> On 04/10/12 09:19, Mattias Gaertner wrote:
>>> On Thu, 04 Oct 2012 00:33:07 +0300
>>> patspiper <patspiper at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> What is the correct way to clone programmatically a component, ie
>>>> assign
>>>> all its properties to another component of the same class (like the
>>>> IDE
>>>> designer's copy/paste)?
>>>>
>>>> The code below used to work in Delphi but does not with Lazarus
>>>> (result
>>>> is nil).
>>>> RegisterClass(TMyComponent);
>>>> Clipboard.SetComponent(MyComponent);
>>>> Result:= TMyComponent(Clipboard.GetComponent(Self, Self));
>>> It should work in Lazarus too.
>> It does not. It seems due to the fact that TClipboard.GetComponent
>> uses pcfComponent while TClipboard.SetComponent uses pcfCustomData
>> instead. Substituting pcfCustomData by pcfComponent did the job, but
>> then the copied (original) component seems to lose its events. I will
>> test further and report.
> The copied (original) component's events are fine. However, it is the
> clone's events which are not as desired. Its methods code+data are
> equal to the original component's methods code+data whereas the data
> part should point to the clone itself for proper operation of the
> clone. Any ideas on how this should be handled?
I have gathered the following presumed bugs:
1- TClipboard.GetComponent uses pcfComponent while
TClipboard.SetComponent uses pcfCustomData instead.
2- Clipboard.SetComponent/GetComponent do not save/restore events.
Events are nil. This is the clipboard text of a button with an assigned
OnClick event (note the missing OnClick):
object Button1: TButton
Left = 24
Height = 25
Top = 16
Width = 139
Caption = 'Button1'
Font.Height = -20
Font.Name = 'Sans'
ParentFont = False
TabOrder = 0
end
Stephano
More information about the Lazarus
mailing list