[Lazarus] TControl.AssignTo() and TCustomAction relationship

taazz taz at evosi.eu
Sat Feb 13 23:56:48 CET 2016


On 11/02/2016 17:29 μμ, Graeme Geldenhuys wrote:
> Hi,
>
> Why does TControl.AssignTo() have a special case for TCustomAction?
> TCustomAction.AssignTo() already does property assignments, so what is
> the reason for the special code in TControl.AssignTo?
>
> Here is the code in question:
>
> procedure TControl.AssignTo(Dest: TPersistent);
> begin
>    if Dest is TCustomAction then
>      with TCustomAction(Dest) do begin
>        Enabled := Self.Enabled;
>        Hint := Self.Hint;
>        Caption := Self.Caption;
>        Visible := Self.Visible;
>        OnExecute := Self.OnClick;
>        HelpContext := Self.HelpContext;
>        HelpKeyword := Self.HelpKeyword;
>        HelpType := Self.HelpType;
>      end
>    else inherited AssignTo(Dest);
> end;
>
>
>
>
> Regards,
>    - Graeme -
>
TPersistent introduces 2 methods that help implement a data copy between 
the controls. 1) the well known and mostly used Assign method where you 
copy the data from an external control and 2) AssignTo method where you 
write code to copy the controls values to an external control instead of 
inheriting the named control. The second method gives you control over 
3rd party controls that you do not and should not inherit just to code 
some data copy compatibility. As an example lets assume that I'm 
writting a DBGRid descendant/replacement by overriding the assign method 
I allow my control to copy settings from a TDBGrid, in code that would 
be MyDBGrid.Assign(DBGrid1);. Overriding the ASsignedTo method you allow 
the opposite as well ee DBGrid1.Assign(MyDBGrid) will call 
TMyDBGrid.AssignTo(DBGrid1) and my code will copy my internal data to 
the dbgrid1.

To sum it up TControl.AssignTo code enables any TControl descendant to 
be assigned to a TCustomAction, ee code like ActFileOpen.Assign(Shape1);





More information about the Lazarus mailing list