Buenas,
A ver, te comento como funciona el tema de los uses. En un formulario/clase tenemos 2 "apartados" por defecto, la
interface y la
implementation (pueden haber dos más, la
initialization y la
finalitation, pero eso ya es otro tema jejejeje).
En ambos casos podemos poner la cláusula
uses para hacer uso de una unidad. La diferencia radica en que la cláusula uses de la interface es, por decirlo de alguna manera, excluyente. Es decir, si en el form A haces uses en la interface del form B, en el form B no puedes hacer uses del form A en la interface porque entonces aparece el error de "Circular unit reference".
Para evitar este error, debemos de hacer el uses del segundo formulario en la
implementation.
ejemplo incorrecto
unit FormA;
interface
uses FormB;
implementation
.....
###############################
unit FormB;
interface
uses FormA; // referencia circular
implementation
.....
Ejemplo correcto
unit FormA;
interface
uses FormB;
implementation
.....
###############################
unit FormB;
interface
................
implementation
uses FormA; // referencia NO circular
No obstante, y en la medida de lo posible, es bueno evitar referencias circulares (aunque se eviten declarando uno en la interface y otro en la implementation - o los dos en la implementatio -) y hacer uso de paso de parámetros o bien definir unidades intermedias donde poner las funciones/objetos comunes a los dos formularios.