Cita:
Empezado por jbautista
....
Ahora tengo dudas mas especificas...
1: FreeAndNil me funciona bien desde el OnClose, cierra y libera el Form desde el boton para cerrar por default de las ventanas de windows.
Pero en algunos casos, cuando pongo un TBotón "Salir" y en su evento OnClick invovo a Close me genera un error.
|
Te cuento que he probado colocar un boton en el cual llamo al método Close del formualrio y no he tenido problemas.
Desde luego para mostrar el formulario lo hago asi (Siguiendo tu ejemplo):
Código Delphi
[-]procedure TForm1.Button3Click(Sender: TObject);
begin
if not Assigned(Form2)then
Application.CreateForm(TForm2, Form2);
Form2.WindowState:=wsNormal;
Form2.Show;
end;
En el evento OnClose del formulario (Form2 en mi caso) hago esto:
Código Delphi
[-]procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(Form2);
end;
Y en un boton que tengo en el formulario 2 (Form2) hago esto:
Código Delphi
[-]procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
Y no tengo problemas...
.
Quisas en tu caso tienes algun código mas por ahí , que es el causador del error que mencionas.
.
Cita:
Empezado por jbautista
2. Assigned es la mejor forma de verificar si un Form ya esta creado???
|
Bueno...
..si es una forma,en realidad la funcion Assigned lo que hace es Verificar si un puntero o variable es diferente de nulo(nil) algo asi:
Código Delphi
[-]if MiVarible<>Nil then...
ó
if @MiPuntero<>Nil then....
De ahi la importancia de utilizar la funcion
FreeAndNil.
Cita:
Empezado por jbautista
3. Application.CreateForm(TForm_Prueba, Form_Prueba); es la mejor forma para crear el Form???
|
Es una forma de hacerlo, en realidad delphi en el archivo .DPR asi lo hace, pero tambien puedes hacerlo de esta forma que es equivalente:
Código Delphi
[-]procedure TForm1.Button3Click(Sender: TObject);
begin
if not Assigned(Form2)then
Form2:=TForm2.Create(Application);
Form2.WindowState:=wsNormal;
Form2.Show;
end;
Saludos...