Recent

Author Topic: tracing through ClassParent  (Read 327 times)

robert rozee

  • Sr. Member
  • ****
  • Posts: 276
tracing through ClassParent
« on: March 31, 2025, 06:13:32 pm »
hi,
    i am after some help with turning the below bit of hacked code into something civilized:

Code: Pascal  [Select][+][-]
  1.   try
  2.     writeln(Label1.ClassParent.ClassName);
  3.     writeln(Label1.ClassParent.ClassParent.ClassName);
  4.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassName);
  5.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  6.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  7.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  8.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  9.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  10.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  11.     writeln(Label1.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassParent.ClassName);
  12.   except
  13.   end;

it produces the following output:
Code: [Select]
TCustomLabel
TGraphicControl
TControl
TLCLComponent
TComponent
TPersistent
TObject

i'm after figuring out how to make this into a walk along the chain until i see "TObject", but haven't had much success doing so:

Code: Pascal  [Select][+][-]
  1. procedure walk;
  2. var O:TObject;
  3. begin
  4.   O:=Label1;
  5.   repeat
  6.     writeln(O.ClassName);
  7.     O:=O.TObject(ClassParent);
  8.   until O.ClassNameIs('TObject')
  9. end;

line 7 doesn't compile    :-[    any suggestions?


cheers,
rob   :-)

cdbc

  • Hero Member
  • *****
  • Posts: 2155
    • http://www.cdbc.dk
Re: tracing through ClassParent
« Reply #1 on: March 31, 2025, 06:32:35 pm »
Hi
Quick'n'Dirty:
Code: Pascal  [Select][+][-]
  1. procedure TfrmMain.btnWalkClick(Sender: TObject);
  2. var O: TClass;
  3. begin
  4.   O:= lblVers.ClassType; /// <- returns TClass
  5.   repeat
  6.     Memo1.Append(O.ClassName);
  7.     O:= O.ClassParent; /// <- returns TClass
  8.   until O = nil;
  9. end;  
Where
Code: Pascal  [Select][+][-]
  1. type
  2.   TClass = class of TObject;
HTH
Regards Benny
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE5 -> FPC 3.2.2 -> Lazarus 3.6 up until Jan 2024 from then on it's both above &: KDE5/QT5 -> FPC 3.3.1 -> Lazarus 4.99

robert rozee

  • Sr. Member
  • ****
  • Posts: 276
Re: tracing through ClassParent
« Reply #2 on: March 31, 2025, 06:56:29 pm »
brilliant, it works - many thanks!


cheers,
rob   :-)

 

TinyPortal © 2005-2018