Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2003
mauro mauro is offline
Miembro
 
Registrado: jun 2003
Ubicación: Buenos Aires Argentina
Posts: 13
Poder: 0
mauro Va por buen camino
Post Varias Dudas

Hola, que tal?

1. Como hago para cerar un formulario, o sea
descargarlo, probe usando el metodo
form.free, pero si lo abro y lo cierro varias
veces me tira errores.

2. como se si un formulario ya esta cargado,
ya que si uso dos veces la funcion createform,
me crea 2 veces el formulario y lo que necesito
es que se cree una sola vez.

muchas gracias.
Responder Con Cita
  #2  
Antiguo 10-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No especificas desde dónde llamas al form.free pero no puedes hacerlo desde un método de la misma forma. Usa el método Release en su lugar.

Por otro lado quizá te convenga más usar el evento OnClose del form poniendo Action := caFree. Esto hace que el form se libere cuando se cierra.

En cuanto a la segunda pregunta hay dos maneras de hacerlo.

La más fácil es usar la variable global en la unidad del form. Digamos que Form2 es el formulario que deseas que se cree una sóla vez. Cuando lo crees usas:
Código:
if Form2 = nil then
  Form2 := TForm2.Create(nil);

Form2.Show;
Y en el evento OnDestroy de Form2 pones:
Código:
Form2 := nil;
El problema con esto es que utilizas una variable global además de referirte a una instancia particular de una clase (Form2) dentro de la misma clase(TForm2), ambas cosas no muy recomendadas por los expertos.

La manera "difícil" en realidad es fácil

Suponiendo que abres Form2 desde el formulario principal (Form1) puedes declararla como propiedad de este:

Código:
type
  TForm1 = class
    ...
   public
     Form: TForm2;
  end;
Y procedes igual que en el caso anterior para crearla: verificas que sea distinta de nil.

Con esto ya evitaste el uso de una variable global. El punto está ahora en cómo poner en nil la variable cuando el formulario se destruya. La solución es "pedirle" a Form2 que le avise a Form1 que se destruye. Para ello, modifica la creación de Form2 como sigue:
Código:
if Form2 = nil then
begin
  Form2 := TForm2.Create(nil);
  Form2.FreeNotification(Self);
end;

Form2.Show;
FreeNotification indica a Form2 que notifique a Form1 (Self) cuando se cree o se destruya. Form1 se entera de esto con el método Notofication:
Código:
procedure Notification(
  AComponent: TComponent; Operation: TOperation); override;
que codificas así:
Código:
procedure TForm1.Notification(
  AComponent: TComponent; Operation: TOperation);
begin
  if (Operation = opRemove) and (AComponent = Form) then
    Form := nil
  else
    inherited;
end;
Espero no haberte causado mucha confusión.

// Saludos

Última edición por roman fecha: 10-07-2003 a las 07:36:25.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:22:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi