Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   InheritsFrom (https://www.clubdelphi.com/foros/showthread.php?t=5410)

tango01 20-11-2003 15:42:23

InheritsFrom
 
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.
...
Código:

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
Código:

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

cuando recorro la lista
Código:

  for i := 0 to self.list.Count -1 do
hago el if:
Código:

if self.list[i].InheritsFrom(TControl) then
y estoy seguro que TGroupBox deriba de TControl y que estoy recorriendo bien porque si hago un
Código:

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
Código:

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:

Código:

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.-


La franja horaria es GMT +2. Ahora son las 07:58:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi