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 08-04-2008
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
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
Poder: 19
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 [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
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
Poder: 22
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
Poder: 21
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
Poder: 22
Walterdf Va por buen camino
Muy buena opción enecumene!!, mil gracias!

Un abrazo

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

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 18:13:54.


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