[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