[Lazarus] Assigning Class to object
Steve Gatenby
steveg at nevets.com.au
Mon Dec 6 01:48:56 CET 2021
Thank you, that should work for me :)
On 6/12/21 10:15 am, R.Smith via lazarus wrote:
> > if I call the following procedure with either a TButton or Panel
> ctrl (for example), how can I use the class info contained within the
> MyObj to choose the correct Class
>
> Two things,
>
> Firstly the correct way of determinig class (as with your current
> solution) is like this:
>
> if (MyObj is TButton) then TButton(MyObj).OnMouseDown := tmethod
> (not important here) else
> if (MyObj is TPanel) then TPanel(MyObj).OnMouseDown := tmethod (not
> important here) else
> // etc...
>
> If you want to change a property/method of many descendants of class
> which all contain the same property, that is quite easy and what
> object orientation is great at, but you have to figure out what is the
> most recent ancestor class that is the ancestor of all the classes
> that you wish to treat similarly, AND if the property(ies) are defined
> in the ancestor or higher. This is trivial to do just looking through
> the FPC help/documentation pages for the classes in question.
>
> In the case you describe, from memory I believe TControl is the
> recent-most ancestor of both those classes that already has the
> OnMouseDown event defined, so this should work:
>
> procedure SetThis( MyObj :TObject );
> begin
> TControl(MyObj).OnMouseDown := @someMouseDownMethod;
> end;
>
>
> HTH.
>
>
>
More information about the lazarus
mailing list