Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2007
fafastrungen fafastrungen is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
fafastrungen Va por buen camino
No puede heredar un tipo

Hola, he declarado en una unidad la siguiente sintaxis:

Código Delphi [-]
unit General;
interface
uses IdComponent; // INDY 10
type TIdStatus = IdComponent.TIdStatus; // Viene de la unidad IdComponent de INDY 10
 
type TGeneral = Class(TObject)
...

La unidad IdComponent es una unidad de Indy 10 y dentro de esta unidad esta declarada la enumeracion TIDStatus:

Código Delphi [-]
TIdStatus = (
  hsResolving,
  hsConnecting,
  hsConnected,
  hsDisconnecting,
  hsDisconnected,
  hsStatusText,
  ftpTransfer,
  ftpReady,
  ftpAborted
);

Hasta acá todo bien, despues dentro del formulario principal creo una instancia de la clase TGeneral, defino una variable de tipo TIdStatus y al crear el form quiero asignarle el valor hsDisconnected a esta variable, acá es donde está el problema, me dá un error E2003 diciendo que hsDisconnected es un identificador sin declarar.
En realidad es cierto, ya que hsDisconnected no está definido ni en la unidad del form ni en la unidad General, pero he definido un tipo TIDStatus el cual desciende de IdComponent.TidStatus, por lo que los valors de TIdStatus deberian ser accesibles desde el form.
Obviamente desde la unidad General puedo acceder a los valores del enumerador TIdStatus, pero no mas allá de la unidad General.

Alguna idea ?
Responder Con Cita
  #2  
Antiguo 09-09-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Declaración innecesaria

¡Hola a todos!

Fafastrungen:

Una declaración como
Código Delphi [-]
type TIdStatus = IdComponent.TIdStatus;
no crea herencia o descendencia (por lo menos en sentido orientado a objetos). Es sólo una declaración de tipo, con la cual le indicas al compilador que trate a un nuevo tipo de dato como equivalente de otro declarado previamente.

Cuando en la unidad de la forma, el compilador te señala que el identificador hsDisconnected no está declarado, es porque no tienes en alguna de sus cláusulas Uses el nombre de la unidad que declara esa constante (IdComponent).

En todo caso, por lo que puede apreciarse, es innecesaria la redeclaración del tipo de dato TIdStatus. Basta que agregues la unidad IdComponent al Uses de la implementación de la forma:
Código Delphi [-]
implementation

{$R *.dfm}

Uses
  IdComponent;

Un abrazo declarado.

Al González.
Responder Con Cita
  #3  
Antiguo 10-09-2007
fafastrungen fafastrungen is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
fafastrungen Va por buen camino
Gracias Al por la respuesta y la verdad que no sabia que no se podía heredar un enumerador.
Lo he solucionado como comentas, agregando la unidad IDComponent a la unidad del form, pero lo que yo quería era independizar completamente, osea, quiero que todo esté contenido en la unidad General y no tener que agregar codigo al resto de unidades que usan General.
Lo que quería lograr era que sea suficiente con solo declarar la unidad General dentro del codigo que vaya a implementar, de esta forma no tengo que declarar nada mas, ya que si tengo, supongamos groseramente, 100 forms que usan la unidad General, tendría que declarar dentro de cada unidad de los 100 forms la unidad General y la unidad IdComponent, en cambio si se pudiera lo que quiero, con solo declarar la unidad General sería suficiente, ya que IdComponent estaría declarada en General.

Gracias de nuevo.
Responder Con Cita
  #4  
Antiguo 10-09-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Es bueno saber que está solucionado.

Pero, retomando la interesante reflexión que haces, cabe añadir que escribir el nombre de una unidad en una cláusula Uses no se compara en nada con escribir el resto del código que normalmente va dentro de una unidad.

No obstante, cuando es necesario repetir en varios lugares una sección de código bastante significativa para el autor, y, por su naturaleza, dicho código no puede ser sometido a los dominios de una función (por ejemplo una cláusula Uses con varios nombres de unidades), es posible recurrir al uso de directivas $Include:
Código Delphi [-]
  Uses
    {$Include NombresDeUnidades1.inc}, SysUtils, Variants;
Aunque francamente desaconsejaría esta práctica en tu caso.

Además, en un grupo de cien unidades que hacen referencia a un mismo elemento de otra unidad, es muy probable que exista una buena cantidad de código común relacionado con el uso de dicho elemento, código que podría sintetizarse mediante la creación de nuevas funciones o una buena revisión a la jerarquía de clases. Recuerda que las formas sí pueden derivar (descender / heredar) de otras formas; muchos OnCreate con el mismo código, por ejemplo, pueden convertirse en un sólo OnCreate colocado en una plantilla "base", o cuando menos concentrar en éste lo que es común para todos aquellos.

Espero también esto sea de utilidad.

Un {$Abrazo+}.

Al González.
Responder Con Cita
  #5  
Antiguo 10-09-2007
fafastrungen fafastrungen is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
fafastrungen Va por buen camino
Todo lo que sea informacion es bienvenida, por lo que muchas gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Heredar Objetos ADO mcarazas Varios 3 19-10-2006 10:07:20
Heredar objeto carlomagno OOP 5 19-06-2006 01:00:05
se puede saber el tipo de un field de mysql seba_cipo MySQL 2 12-05-2006 14:36:15
Heredar del DBNavigator Carlosj OOP 0 11-01-2005 09:29:43
se puede usar campos tipo AutoNumber ronimaxh Conexión con bases de datos 1 22-12-2003 23:49:50


La franja horaria es GMT +2. Ahora son las 09:42:39.


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
Copyright 1996-2007 Club Delphi