Ver Mensaje Individual
  #6  
Antiguo 01-11-2019
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 119
Reputación: 10
Javierus Va por buen camino
Yo todos los forms los creo con
Código Delphi [-]
Application.CreateForm(TClaseDelForm, aForm);

Ejemplo para un form Modal, usando caFree:

Código Delphi [-]
function ShowFormModal(ClaseFormulario:TFormClass):TmodalResult;
var
  Formulario: TForm;
begin
  Application.CreateForm(ClaseFormulario, Formulario);
  Try
    result:=Formulario.ShowModal;
    //aquí el Formulario ya no existe; no accedas a ninguna de sus propiedades o métodos
  Except
    result:=mrCancel;
    Formulario.Release;
  end
end;

Ejemplo para un form Modal, usando caHide:

Código Delphi [-]
function PedirDatos(var Nombre,Direccion:string):boolean;
var
  Formulario: TFormNombreDireccion;
begin
  Application.CreateForm(TFormNombreDireccion, Formulario);
  Try
    result:=(Formulario.ShowModal=mrOk);
    //aquí el Formulario aún existe; simplemente es invisible
    if result then begin
      Nombre:=Formulario.edtNombre.Text;
      Direccion:=Formulario.edtDireccion.Text;
    end;
  finally
    Formulario.Release;  //Hay que liberarlo sí o sí, porque no se destruirá solo
  end
end;

Ejemplo para un form NO Modal, es mejor que uses caFree; otra cosa es complicarse la vida:

Código Delphi [-]
procedure ShowForm(ClaseFormulario:TFormClass);
var
  Formulario: TForm;
begin
  Application.CreateForm(ClaseFormulario, Formulario);
  Try
    Formulario.Show;
  Except
    Formulario.Release;  //Solo lo destruimos nosotros si da error el Show
    raise;  //Y volvemos a relanzar la excepción
  end
end;
Responder Con Cita