Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-03-2011
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Presentación y duda.

Buenas, soy J.Slann y me presento en estos foros, por lo que veo sois una gran comunidad de delphi.

Estoy realizando un pequeño proyecto en delphi y tengo algunos problemas.

Antes de nada decir que también soy nuevo programando con delphi aunque ya habia programado antes en pascal. Uso Delphi 7.

Mi problema es el siguiente:

Digamos que tengo varias unit.

Unit1: es donde tengo el programa principal, necesita Unit2 y Unit3.
Unit2: otra unit que utiliza la unit3.
Unit3.

Lo que quiero es definir un tipo de variable en Unit1 de manera que Unit2 la pueda utilizar. Problema: en uses de Unit2 no puedo poner Unit1 porque entonces obtengo el error circular (por poner en uses de cada Unit la otra unit). En definitiva he solucionado el problema temporalmente definiendo el tipo que quiero usar en Unit3, pero necesito que este en Unit1, ¿Como consigo que la Unit2 me reconozca el type creado en Unit1?

Espero que me podais ayudar aunque no me he explicado muy bien. Gracias.

Un SAludo.
Responder Con Cita
  #2  
Antiguo 01-03-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Hola J. Slan! Bienvenido al Club!

Con respecto a tu pregunta, en Unit2 no puedes trasladar a la sección de implementación el uso de Unit1?
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 01-03-2011
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Que rapidez!

Te refieres a en Unit2 poner:

implementation
uses Unit1;
---------------------------------------------

Lo he probado, y sigue sin reconocerme el tipo de variable que quiero usar.

Y con esto me surge una otra duda, entiendo para que vale uses, ¿pero para que vale implementation??
Responder Con Cita
  #4  
Antiguo 01-03-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
La unidad se divide en dos partes "interface" que es pública, es decir cualquier unidad puede hacer uso de las constantes, tipos de datos, funciones y variables definidos en la parte de interfaz.

Todo lo que haya bajo la palabra implementation, es "privado a las funciones internas de la unidad", por tanto no pueden verse desde el exterior de esa unidad.

Para el problema que tienes, suele hacerse lo que te han comentado, o incluso mejor, crearte una cuarta unidad donde sólo tengas todo lo que ha de ser público (yo, como original que soy, suelo crearme la unidad publica.pas en todos mis programas ). Todas las unidades hacen uso de publica.pas, pero publica.pas no hace uso de ninguna unidad del proyecto.

Edito: Ya puestos a ser quisquillosos, el hecho de que tengas referencias circulares, o que ciertas unidades necesiten de otras, significa que tu diseño de la aplicación se podría/debería mejorar .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 02-03-2011
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Gracias.

En realidad las referencias circulares no me aparecen si no añado esto ultimo que comento. Es un proyecto que estoy retomando y ya estaba diseñado así. No da problemas pero no consigo hacerlo funcionar como quiero.

Mi idea es tener en la Unit principal un array de un tipo concreto (que me he creado yo) y llamar a la unit datos.pas que sirve para guardar y cargar los datos, bien, quiero que datos.pas me guarde los datos en el vector declarado en la unit1 y no lo consigo, porque la unit principal necesita usar datos.pas pero guardando el contenido en el vector creado en la unit principal. PROBLEMA: datos.pas no me reconoce el tipo de dato creado en la unit principal.
Responder Con Cita
  #6  
Antiguo 02-03-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo definiría ese tipo de datos en "datos.pas" es más lógico ya que esa misma unidad es la que que tiene rutinas para manipular dicho tipo de datos.

En principal harás un:

Código Delphi [-]
unit principal;

interface
 
uses datos;

Y nuestro datos:
Código Delphi [-]
unit datos;

interface

type TDato = array [0..243] of string;

procedure Ordena(var elArray:TDato);
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 02-03-2011
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Gracias por la ayuda.

Entiendo lo que me quieres decir. Yo antes lo tenia puesto así:

Unitprincipal: vector_datos
datos.pas: los procedimientos de cargar datos
Unit3: tenia declarado el tipo_vector_datos

Asi funcionaba, pero el problema venia a que me exigian que vector_datos y la declaracion Tipo_vector_datos estuvieran en la unitprincipal. Pero ahora entiendo que realmente vector_datos estaría mucho mejor en datos.pas porque aparte de no tener problemas, me evitaria pasar como parametro vector_datos en los procedimientos de datos.pas.

Asique no voy a seguir perdiendo más tiempo intentando realizar referencias circulares. Un saludo y gracias, me ha servido tu ayuda.
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
Presentacion y Duda sobre Focus Rafael Castro Varios 2 24-12-2009 16:02:32
Presentación y pregunta paquechu Internet 8 16-10-2008 22:04:29
Grilla con presentación de CheckBox Bertifox2008 Internet 1 27-08-2008 23:37:41
Presentación (texto localizado) Shadowless PHP 3 14-05-2007 20:20:42
Presentación Powerpoint JamesBond_Mx Servers 0 02-07-2003 15:59:37


La franja horaria es GMT +2. Ahora son las 10:07:51.


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