[Lazarus-es] ventanas no modales
José Mejuto
joshyfun en gmail.com
Vie Jul 29 22:07:49 CEST 2011
Hello Paola,
Friday, July 29, 2011, 7:04:13 PM, you wrote:
>> ahora las declaré en la sección Implementation del formulario principal.
PB> de todas maneras, el closeAction:= caFree me deja "mugre" en la
PB> variable, por tanto, no puedo usar el if Assigned(f5)...
PB> debería poner f5:= nil... pero debería f5 ser global, porque sino "no
PB> existe" obviamente.
No, no las hagas globales, no es necesario y sólo te va a complicar la
vida, hazla local al procedimiento que hace el Create nada más, si
quieres una referencia a esa ventana desde otro punto del código has
de usar el "ReciclaVentana" para que te devuelva un puntero a ese
form. Ejemplo:
procedure CreaElForm();
var
F5: TF5;
begin
TForm(F5):=ReciclaVentana('TF5');
if not Assigned(F5) then begin
F5:=TF5.Create(Self);
end;
F5.Show;
end;
procedure OtraFuncionQueNecesitaF5();
var
LaMismaf5: TF5;
begin
TForm(LaMismaf5):=ReciclaVentana('TF5');
if Assigned(LaMismaf5) then begin
LaMismaf5.ActualizaValores();
end else begin
DebugLn('La ventana F5 no está disponible, no creada o destruida');
end;
end;
PB> En qué lugar aconsejan Uds declarar todas las variables de los
PB> formularios? en alguna unidad global?
No, no... De esas ventanas sólo puede haber una instancia por lo que
comentas (ya que antes eran modales) por lo tanto lo más fácil es usar
el método del "reciclaventana" ya que otras implementaciones más
"limpias" son mucho más complejas.
La ventana no está referenciada por ninguna variable, digamos que
simplemente existe, con el "reciclaventana" le pedimos que nos busque
entre las creadas una de la clase que digamos, y que nos la entregue
de vuelta.
--
Best regards,
José
More information about the Lazarus-es
mailing list