2011-11-22 6 views
6

Próbuję zrobić coś takiego:Jak stwierdzić, czy jedna klasa TClass pochodzi od innej?

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; 

To daje błąd „operator nie dotyczy tego typu argumentu”. używam Delphi 7.

+0

Nie zapomnij zaakceptować odpowiedź ;-) – TLama

Odpowiedz

17

Najpierw należy sprawdzić, czy można zmienić funkcję przyjąć tylko klasę forma:

function CreateIfForm(const nClass: TFormClass): TForm; 

i ominąć konieczność typu kontroli i odlewania.

Jeśli nie jest to posssible, można użyć 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; 
+0

InheritsFrom! Tak, właśnie tego szukam. Dzięki –

+0

@Ulrich - Twoja druga odpowiedź jest naprawdę poprawna: funkcja nie powinna nigdy akceptować klasy, która nie jest formą. –

+0

@Nick, twoje prawo oczywiście. Przeformułowałem moją odpowiedź, aby lepiej to odzwierciedlić. –