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 30-06-2005
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
no cargar varias form en una instancia...

hola a todos, en delphi hay alguna manera de que desde una forma pueda llamar a otra forma por medio de un boton pero si se vuelve a oprimir el boton ya no vuelva a cargarse.

es evidente que se consiga con el codigo de:
frm1 := frm1 .Create(Self);
frm1 .Show;

Esto me permite regresar a mi form donde la llame, pero por si acaso un usuario vuelve a oprimir el boton llamara a cargarse la form de nuevo, quisiera saber si es posible evitar esto que se cargarse mas de una vez.

muchas gracias.
Responder Con Cita
  #2  
Antiguo 01-07-2005
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
Una opción sencilla:


Código Delphi [-]
if frm1 <> nil then
begin
  frm1 := frm1 .Create(Self);
  frm1 .Show;
end;

y sólo tienes qe asegurarte de que cuando se cierre el formulario vuelvas a poner la variable frm1 en nil. Esto lo puedes hacer en el evento OnClose del formulario.

Esto suponiendo que al cerrarlo también lo destruyes. Si sólo lo ocultas entonces sería:


Código Delphi [-]
if frm1 <> nil then
begin
  frm1 := frm1 .Create(Self);
end;

frm1 .Show;

// Saludos
Responder Con Cita
  #3  
Antiguo 01-07-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Código Delphi [-]
  
procedure TForm1.Button1Click(Sender: TObject);
begin
   if (Form2 <> nil) and not (Form2.Visible = true)  then
   begin
     Form2.Create(Self);
     Form2.Show;
   end;
end;

Saludos.
Responder Con Cita
  #4  
Antiguo 01-07-2005
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
Je, je. Es curioso. Vi el mensaje de lucasarts_18 en el mail y entré para indicar que algo está incorrecto y pues me percato que desde el ejemplo que yo puse está mal

La comparación no puede ser

Código Delphi [-]
if frm1 <> nil then

sino alrevés:

Código Delphi [-]
if frm1 = nil then

// Saludos
Responder Con Cita
  #5  
Antiguo 01-07-2005
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
muy bien pero, si cierro la ventana segunda ya no se vuelve a cargar, debo de cerrar la primer ventana y solo a si me vuleve a abrir la segunda ventana, el codigo corregido es este:
if frm2 <> nil thenbegin frm2 := Tfrm2 .Create(Self); frm2 .Show;end;
frm1 pricipal ventana
frm2 segunda ventana
gracias
Responder Con Cita
  #6  
Antiguo 01-07-2005
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
A ver. Creo que ya nos liamos.

El código que pones no es correcto según la aclaración que hice en el último mensaje.

En frm1, para abrir el segundo formulario pones:


Código Delphi [-]
if frm2 = nil then
begin
  frm2 := Tfrm2.Create(Self);
end;

frm2.Show;

En el evento OnClose del segundo formulario pones:


Código Delphi [-]
procedure Tfrm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frm2 := nil;
end;

Si el segundo formulario está abierto entonces frm2 es distinto de nil y la condición en el primer código evita que se cree de nuevo.

Cuando cierras el segundo formulario, la asignación Action := caFree hace que el formulario se destruya y la asignación frm2 := nil vuelve a poner a nil la variable con la que te refieres al formulario. Entonces, cuando vuelves a intentar abrirlo, la condición (frm2 = nil) es ahora cierta y se vuelve a crear.

En cualquiera de los dos casos el formulario se muestra. Si ya existía, frm2.Show garantiza que se ponga al frente en caso de haber estado oculto por otra ventana.

// Saludos
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 20:20:23.


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