Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-09-2007
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
Evitar que un form se abra estando abierto

pues como el titulo lo dice, si en mi aplicacion el usuario tiene un form abierto o creado e intenta abrir el mismo form como hago para evitar que se abra avisandole a traves de un showmessage?

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 18-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Para saber si está creado... precisas comprobar la variable en que se guarda la instancia del objeto para ver si es "nil" o está asignada. Para ver si está visible... creo recordar que hay un método "Showing()" *, o si no tal vez te apañe la propia propiedad "Visible" de los formularios.

* Es una propiedad en realidad.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 18-09-2007 a las 02:02:16.
Responder Con Cita
  #3  
Antiguo 18-09-2007
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
Gracias dec, hice esto:

Código Delphi [-]
procedure TFPedido.FormCreate(Sender: TObject);
begin
if FPedido.Showing = True then
BEGIN
  ShowMessage('Ya tienes Abierto este modulo!');
  Abort;
  end;
end;

y me tira un error, un classexception.

Saludos,
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 18-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me hace raro que compruebes en el "OnCreate" del formulario si este está visible... porque esté como esté por el "OnCreate" no pasará sino una vez... cuando se cree el formulario.

Pero lo mismo estoy desvariando. Lo que es seguro es que acaso antes de comprobar si el formulario está visible (con "ShowWing") deberías comprobar si realmente la variable "FPedido", en este caso, está asignada, no es "nil".

Porque si el formulario no está creado es evidente que no estará visible, y más aún, no puede accederse a las propiedades de un objeto que no ha sido creado.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 18-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Una pregunta: ¿Hay alguna propiedad que nos permita diferenciar los formularios? El nombre, la clase, etc ...

Si es así puedes usar un bucle como este:
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 cuando crees o llames al formulario, podrías comprobar si existe. Yo no lo haría dentro del create del formulario.
Código Delphi [-]
if not Existe('Form1') then
begin
  // Aqui lo creas
end;
Responder Con Cita
  #6  
Antiguo 18-09-2007
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
Disculpa dec, lo puse en el boton donde se abre el form y aun asi me sale el mismo error, para serte sincero no entendi mucho lo que me quisiste decir, perdon.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #7  
Antiguo 18-09-2007
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
Gracias seoane dejame aplicarlo a ver si me funciona, luego te comento.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 18-09-2007
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
Gracias seoane!! me ha funcionado de maravillasel codigo me quedo asi:

Código Delphi [-]
procedure Tincio.BitBtn1Click(Sender: TObject);
begin
if not Existe('FPedido') then
begin
FPedido:=TFPedido.Create(self);
FPedido.Show;
end else
ShowMessage('Ya tienes abierto este Módulo!');
end;

Muchas Gracias, Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #9  
Antiguo 18-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por enecumene
Disculpa dec, lo puse en el boton donde se abre el form y aun asi me sale el mismo error, para serte sincero no entendi mucho lo que me quisiste decir, perdon.
Bueno... lo cierto es que hoy ando algo más espeso de la cuenta... no voy ni a releer lo que he escrito, no vaya a ser que ni yo mismo lo entienda.

PD. La idea de Seoane me parece estupenda, como no podía ser de otro modo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 18-09-2007
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.275
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
Otra opción puede ser utilizar la propia variable del formulario.

Código Delphi [-]
procedure Tincio.BitBtn1Click(Sender: TObject);
begin
if not Assigned(FPedido) then begin
  FPedido:=TFPedido.Create(self);
  FPedido.Show;
end 
else begin
  ShowMessage('Ya tienes abierto este Módulo!');
end;

Al cerrar el formulario hay que asegurar se de colocar la variable a nil.
__________________
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
  #11  
Antiguo 18-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
... y por qué siquiera avisar de que lo tiene abierto ? Se muestra y ya está.

Código Delphi [-]
procedure Tincio.BitBtn1Click(Sender: TObject);
begin
  if not Assigned(FPedido) then FPedido := TFPedido.Create(self);
  FPedido.Show;
end;

... y en el caso de MDI o si se permite minizar el Form :

Código Delphi [-]
procedure Tincio.BitBtn1Click(Sender: TObject);
begin
  if not Assigned(FPedido) then FPedido := TFPedido.Create(self);
  FPedido.Show;
  if FPedido.WindowState = wsMinimized then
    FPedido.WindowState := wsNormal;
end;

Y edito y añado :

Como decía Neftalí, tienes que recordar poner la variable a nil en el OnClose de FPedido :
Código Delphi [-]
procedure TFPedido.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
  FPedido := nil;
end;
... o utilizar FreeAndNil.
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 18-09-2007 a las 10:19:11.
Responder Con Cita
  #12  
Antiguo 18-09-2007
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
Muchas Gracias Neftali y Gluglu tambien me han servido sus sugerencias, muchas gracias...
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
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
Evitar cerrar form con la tecla ESC... uper Varios 1 06-12-2005 20:11:54
Evitar el minimizado del form maximizado Xema API de Windows 4 27-09-2004 13:02:14
evitar correr mismo form en aplicacion MDI @-Soft OOP 5 01-07-2004 06:03:43
Como evitar que el usuario cierre la form! Waldo API de Windows 2 20-11-2003 18:46:47


La franja horaria es GMT +2. Ahora son las 10:57:47.


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