Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 08-04-2008
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Walterdf Va por buen camino
Arrow Abrir un formulario hijo solo una vez

Buenas a todos
Estoy intentando evitar que un formulario hijo se abra mas de una vez. Investigué en los foros pero las soluciones que encontré no me están ayudando y no se que estoy haciendo mal.
Paso a explicar.

Al abrir la aplicación el form padre (frmMain) llama a un form hijo (frmQuerys) en el evento Activate del mismo de la sig. manera:

(esto lo tengo como variable global: frmQuerys : TfrmQuerys

Código:
procedure TfrmMain.FormActivate(Sender: TObject);
begin
  frmQuerys := TfrmQuerys.Create(Self); 
  frmQuerys.Show;
end;
Hasta aquí todo 10 puntos.

En el evento OnClose del form hijo hago lo siguiente para liberarlo:
Código:
  Action := caFree;
Desde una opción en el form padre puedo volver a llamar a este form hijo pero quiero evitar que se vuelva a crear si ya se está mostrando y lo hago de la sig.forma:

Código:
  if not Assigned(frmQuerys) then
  begin
    frmQuerys := TfrmQuerys.Create(Self);
    frmQuerys.Show;
  end
  else
    frmQuerys.Show;
Si intento abrirlo mientras se está mostrando, no lo abre nuevamente, esto está perfecto. Pero si cierro el form hijo e intento abrirlo me sale una excepción diciendo: "Abstract Error" y no hace nada.
Que estoy haciendo mal???
Muchas gracias desde ya!!
Responder Con Cita
  #2  
Antiguo 08-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
jcarteagaf Va por buen camino
Mi solucion

Yo hago lo mismo de la siguiente manera:

Llamada a la forma Hija

Código Delphi [-]
if frmFormaHija = nil then
  frmFormaHija := TfrmformaHija.Create(Application);
frmFormaHija.Show;
y en el evento OnClose de la forma Hija:

Código Delphi [-]
Action := caFree;
frmFormaHija := nil;

Espero que te sirva.
Responder Con Cita
  #3  
Antiguo 08-04-2008
Avatar de Neftali
Neftali Neftali is offline
Aporreador de teclados
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 12.573
Neftali Va por buen camino
Yo añadiría un par de cosas si me lo permites:

Código Delphi [-]
  if Assigned(frmFormaHija) then

en lugar de:
Código Delphi [-]
if frmFormaHija = nil then

y en el evento OnClose de la forma Hija:

Código Delphi [-]
FreeAndNil(frmFormaHija);

en lugar de:

Código Delphi [-]
Action := caFree;
frmFormaHija := nil;

Un saludo.
__________________
Neftalí -web - MyDropBox-
Guía de estilo, Guía alternativa, TAG's.
*Añade tu foto al Club*

(UPDATE) TrackInfo v.1.7b

Contactar con el Clubdelphi


P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 08-04-2008
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Walterdf Va por buen camino
Mil gracias!!!!
Lo solucioné, me ayudo tu sugerencia y a parte me estaba mandando un lío con la variable (frmQuerys := TfrmQuerys), estaba en dos lugares diferentes. Muchas horas programando!, necesito descanso.
Un abrazo y gracias nuevamente!!!
Saludos
Responder Con Cita
  #5  
Antiguo 08-04-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
enecumene Va por buen camino
Hola, esta es una función que utilizo, es similar a lo que buscas, pero alguna utilidad le encontraras:

Código Delphi [-]
function Existe(Nombre: String): Boolean;
var
  i: integer;
begin
  for i:= 0 to Screen.FormCount - 1 Do
    if Screen.Forms[i].Name = Nombre then
    begin
      Result:= TRUE;
      Exit;
    end;
  Result:= FALSE;
end;

y para usarlo de esta manera:

Código Delphi [-]
procedure Tincio.BitBtn1Click(Sender: TObject);
begin
if not Existe('FPedido') then
begin
FPedido:=TFPedido.Create(self);
FPedido.Show;
end else 
   ShowMessage('ventana hija ya esta abierta!');
end;

espero te sirva,

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 08-04-2008
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Walterdf Va por buen camino
Muy buena opción enecumene!!, mil gracias!

Un abrazo

Saludos!!
Responder Con Cita
Respuesta


Herramientas
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo jzginez OOP 5 22-06-2007 21:40:51
Problema Con formulario Hijo JELIRM Varios 5 10-04-2006 17:45:42
Mostrar formulario hijo TinkerBell .NET 4 28-11-2005 11:23:00
Ayuda con formulario hijo.... ronimaxh Varios 10 26-02-2004 22:11:11
Tamaño formulario hijo craven Varios 1 22-05-2003 00:13:33


La franja horaria es GMT +2. Ahora son las 03:44:11.


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