On Thu, 04 Oct 2012 15:08:31 +0300 patspiper <[email protected]> wrote:
> 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 <[email protected]> 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. Please report this bug. > 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 Are you sure that Delphi SetComponent writes events? Mattias -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
