PDA

Ver la Versión Completa : InheritsFrom


tango01
20-11-2003, 15:42:23
hola gente,

la funcion InheritsFrom me está devolviendo siempre false aún cuando estoy seguro que tendría que dar verdadero. Aca les paso como la estoy usando, seguramente estoy haciendo algo mal.
...

if self.list[i].InheritsFrom(TControl) then

...

Casi todas los componentes heredan de ahi. Grillas, Groupboxes, RatioGroups ... etc.

list es un TObjectList con un listado de objetos como Grillas, Groupboxes, RatioGroups ... etc.

Gracias por su ayuda

Federico.-

delphi.com.ar
20-11-2003, 15:52:27
La herencia de TObjectList es:
TObjectList -> TList -> TObject

Y los items de esta clase son del tipo TObject, por lo tanto lo que contenga esta lista puede heredar o no de TControl.

Porque no nos muestras algún otro ejemplo donde estes seguro que no funcione.


Saludos!

tango01
20-11-2003, 16:00:48
en la lista agrego TGroupBoxes por ejemplo

lista.add(Groupbox1);
lista.add(Groupbox2);
lista.add(DBGrid1);
lista.add(DBGrid2);

cuando recorro la lista

for i := 0 to self.list.Count -1 do

hago el if:

if self.list[i].InheritsFrom(TControl) then

y estoy seguro que TGroupBox deriba de TControl y que estoy recorriendo bien porque si hago un

showmessage(TControl(self.list[i]).Name);

me dice "GroupBox1"

gracias por tu ayuda ... sigo probando sin exito :(

tango01
20-11-2003, 16:07:03
debo tener otro problema porque si creo un proyecto nuevo con un boton y un groupbox

procedure TForm1.Button1Click(Sender: TObject);
begin
if GroupBox1.InheritsFrom(Tcontrol) then
showmessage('si')
else
showmessage('No');
end;

funciona bien.

delphi.com.ar
20-11-2003, 16:11:21
Yo particularmente acostumbro usar el operador is, pero eso no viene al tema.

He probado esto, y funciona sin problemas:

procedure TForm1.Button2Click(Sender: TObject);
var
Ol: TObjectList;
begin
Ol := TObjectList.Create;
Try
Ol.Add(Button1);
if Ol.Items[0].InheritsFrom(TControl) Then
ShowMessage('Ok!')
else
ShowMessage(Ol.Items[0].ClassName + ' no hereda de TControl');
finally
Ol.Free;
end;
end;


PD:
Me parece muy extraño que algo tan básico falle

delphi.com.ar
20-11-2003, 16:14:47
Te aclaro que escribí el mensaje anterior sin leer tu último mensaje... pero tu último mensaje es aún mas desconcertante.

Prueba mostrar el ClassName cuando este falla...

Aunque sea muy loco: ¿Estas usando alguna unit que defina otra clase TControl ?... (CLX??) prueba comparando contra Controls.TControl
¿Que units estas usando?

tango01
20-11-2003, 16:38:27
diste en la tecla delphi.com.ar !!!!!

estaba usando la unit QControls

no me preguntes por que .....

mil gracias.... son esos errores que podes estar años buscando ... gracias de nuevo.

saludos compatriota.

fede.-