David Dubois
David Dubois

Reputation: 3932

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.

Upvotes: 6

Views: 992

Answers (1)

Uli Gerhardt
Uli Gerhardt

Reputation: 14001

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;

Upvotes: 18

Related Questions