Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I tell if one TClass is derived from another?

I'm trying to do something like this:

function CreateIfForm ( const nClass : TClass ) : TForm;
begin
  if not ( nClass is TFormClass ) then
    raise Exception.Create( 'Not a form class' );
  Result := ( nClass as TFormClass ).Create( Application );
end;

This produces error "Operator not applicable to this operand type". I'm using Delphi 7.

like image 337
David Dubois Avatar asked Nov 22 '11 14:11

David Dubois


Video Answer


1 Answers

First you should check if you can change the function to accept only a form class:

function CreateIfForm(const nClass: TFormClass): TForm;

and bypass the need for type checking and casting.

If this isn't posssible, you can use InheritsFrom:

function CreateIfForm(const nClass: TClass): TForm;
begin
  if not nClass.InheritsFrom(TForm) then
    raise Exception.Create('Not a form class');
  Result := TFormClass(nClass).Create(Application);
end;
like image 53
Uli Gerhardt Avatar answered Oct 20 '22 11:10

Uli Gerhardt