[Lazarus] Assigning Class to object

R.Smith ryansmithhe at gmail.com
Mon Dec 6 01:15:33 CET 2021


 > 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