Ver Mensaje Individual
  #2  
Antiguo 05-03-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Hola Karo,
Bienvenido a clubdelphi. Como eres nueva en los foros, te invito a que destines unos minutos para conocer la guia de estilo.

Respecto a tu pregunta, sería oportuno que aclares mejor tu situación. Un ejemplo de como lo estás haciendo, o enfocando el problema.

Inicialmente si unit A debe comunicarse con otra B, A debe tener declarado en uses a B.

Ahora bien, si a su ves B debe comunicar a A algo, debe declarar en uses a A.

El problema es que si ambos se referencian... se forma una dependencia circular. Esto se soluciona trasladando la sección el "uses X" siendo X la unidad de A o B, de la sección interface a la sección implementation:

Código Delphi [-]
...

implementation
uses UnitX;
...

Ahora bien, en lo posible deben evitarse éstas dependencias mutuas, se puede plantear alguna alternativa. Y es por ello que yo indicaba al comienzo si nos puedes comentar con mayores detalles tu caso.
Es una pregunta muy general el hecho de que "una unit deba devolver el dato a otra", cuanto más puntual seas más fácil será tratarlo.

Lo más elemental sería que en Unit2, exista alguna función o método (si es que le pertenece a una clase) que regrese el valor que unit1 necesita. De este modo se puede evitar esta mutua dependencia y sólo unit1 se mantiene acoplada a unit2. Algo así:
Código Delphi [-]
Unit unit2;

...


interface

function UnaFuncion(Parametro: tipo_parametro): tipo_resultado;
...

implementation

function UnaFuncion(Parametro: tipo_parametro): tipo_resultado;
begin
  ...
end;

...
end.

Y de este modo, luego Unit1 puede hacer uso de Unit2:


Código Delphi [-]
Unit Unit1;

interface
uses Unit2; 
// Nota como sólo unit1 conoce a unit2 no se hace falta poner este
// uses en implementation y evitar una referencia circular.

...

implementation

procedure Form1.Button1Click(Sender: TObject);
// en este ejemplo, lo llamamos desde un botón
var algo: tipo_resultado;
begin
  algo := UnaFuncion(...); 
  //llamamos a la función de Unit2 y esta nos regresa el resultado
end;

...

end.

Como te éstas iniciando en Delphi, sugiero que te acerques a la sección FTP y wiki del club. Allí encontrarás material tanto teórico como práctico. Recomiendo la lectura de la Cara Oculta de Delphi 4.

Si tienes mayores dudas puedes consultarnos, pero recomiendo que antes de iniciar un hilo nuevo, realices una búsqueda. Existe la posibilidad de que tu duda haya sido tratada.

Por cualquier duda sobre este tema que iniciaste, continúa aquí por favor.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita