Ver Mensaje Individual
  #5  
Antiguo 18-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por DEPROE
¿hay alguna manera facil de lograr eso?
Todo depende de qué es lo que quieras hacer exactamente y de qué consideras laborioso. Lo fácil no es sinónimo de correcto.

Mi método favorito es éste:

1. Quita todos los formularios secundarios de la opción AutoCreate
2. En el evento OnClose de tus formularios secundarios pon Action := caFree;
3. En el formulario principal redefine el método Notification:

Código Delphi [-]
interface

type
  TForm1 = class(TForm)
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  end;

implementation

(*
  Este método se llama cuando una componente (AComponent) se crea
  o se destruye (Operation). Lo usamos para segurar que la variable de
  un formulario secundario sea nil cuando el formulario se destruye.
*)
procedure TForm1.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;

  { Form2 es un formulario secundario                }
  { Haz lo mismo parar otros formularios secundarios }
  if (AComponent = Form2) and (Operation = opRemove) then
    Form2 := nil;
end;

end.

4. Cuando quieras mostrar un formulario secundario haces esto:

Código Delphi [-]
if not Form2 <> nil then
  Form2 := TForm2.Create(Application);

Form2.Show;

La cosa cambia si abres formularios desde otro lugar que no sea el formulario principal pero esta es la idea.

// Saludos
Responder Con Cita