[Lazarus-es] Dudas varias II

JoshyFun joshyfun en gmail.com
Sab Jun 20 17:45:45 CEST 2009


Hello Bruno,

Saturday, June 20, 2009, 4:23:16 PM, you wrote:

BL> Anduvo perfecto Joshy
BL> Evidentemente esto me va a costar un poco

Que va, es mucho más sencillo de lo que parece...

BL> yo visual basic no use nunca
BL> Vengo de Usar Minigui / OOHG

Comprendo...

BL> donde las cosas son bastante mas sencillas , la forma de
BL> "instanciar" como decis vos es mucho mas sencillo , pero claro ,
BL> probablemente codigo no reutilizable, o un form que no se puede
BL> volver a usar desde otra parte. Entendi perfectamente , la duda
BL> que me queda es , si es necesario nombrar la unidad que
BL> corresponde al form , en USES del form madre, al instanciarlo de
BL> esta forma

Piensa en lo que tiene que hacer el compilador si las diferentes units
fueran casas y cada una de las clases o funciones de una unit fueran
los habitantes de esas casas. Suponiendo que la unit principal, se
llame unit1 y los forms a usar frm1 y frm2, tu al compilador sólo le
dices donde está unit1, este entra en casa y mira los habitantes de la
misma y les preguntan quienes son. Si alguno no es de esa casa, le
dice que es de por ejemplo frm1, entonces lee el mapa de la ciudad
(uses) para ver donde está frm1, así que entra en frm1 y repite el
mismo proceso. Al encontrarse con un habitante que no es de frm1
pregunta de qué casa es y le dice que frm2, vuelve al uses y mira
donde está frm2 y repetimos de nuevo.

Que pasaría si al entrar en frm2 uno de los habitantes le dice que es
de frm1 ? Que iría al uses y entraría en frm1 de nuevo que le llevaría
a frm2 que a su vez le llevaría a frm1 y así hasta el infinito, de
modo que los uses circulares (circular dependency) no están permitidos
en pascal.

Si fuera necesario usar algo de unit1 desde frm2 sólo lo podemos hacer
desde la zona de "implementation" ya que a partir de ahí el compilador
no hace la exploración de las "casas", resumiendo que algo así,
estaría permitido:

uses frm3;

type x=class(tform)
...
...
end

implementation

uses uni1;

function Loquesea(): integer;
begin
  Result:=unit1.MiValor();
end;

-- 
Best regards,
 JoshyFun





More information about the Lazarus-es mailing list