2011-11-22 14 views
6

estoy tratando de hacer algo como esto:¿Cómo puedo saber si un TClass se deriva de otro?

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; 

Esto produce el error "Operador no aplicable a este tipo de operando". estoy usando Delphi 7.

+0

No se olvide de aceptar las respuestas ;-) – TLama

Respuesta

17

En primer lugar, debe comprobar si se puede cambiar la función para aceptar sólo una clase formulario:

function CreateIfForm(const nClass: TFormClass): TForm; 

y pasar por alto la necesidad de comprobación de tipos y fundición.

Si esto no es posssible, puede utilizar 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! Sí, eso es exactamente lo que estoy buscando. Gracias –

+0

@Ulrich - Su segunda respuesta es realmente la correcta: la función nunca debe aceptar una clase que no sea una forma. –

+0

@Nick, su derecho, por supuesto. Reformé mi respuesta para reflejar mejor esto. –

Cuestiones relacionadas