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-02-2011
mbguantay mbguantay is offline
Miembro
 
Registrado: abr 2006
Posts: 22
Poder: 0
mbguantay Va por buen camino
Cómo detectar si un formulario ya está abierto?

Hola amigos como estan?

En realidad no se si se puede hacer. Tengo que abrir un formulario cada cierto tiempo a modo de recordatorio de lo que no hay que olvidarse de hacer. Usé el temporizador para q cada cierto tiempo se abra un formulario com si fuera una agenda del dia, o una alarma... el tema es que si el formulario no se cierra, por algun motivo, digamos no estar sentado en la pc.. al cabao de un tiempo se han abierto un monton de instancias del mismo formulario...

quisiera saber si hay alguna forma de detectar un formulario ya abierto.. para en ese caso, no volver a abrirlo... Gracias!!!
Responder Con Cita
  #2  
Antiguo 10-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Una forma sería:
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: Integer;
begin
  for i:= Screen.FormCount -1 downto 0 do
    if Screen.Forms[i].Name = 'Form2' then  // suponiendo que tu form se llame Form2
    begin
      Screen.Forms[i].Show;
      Exit;
    end;
  with TForm2.Create(Application) do Show;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-02-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Hola.

Yo uso esta forma:

if Formulario = nil then
Formulario := TFormulario.Create(Self);
Formulario.Show;

Saludos
Responder Con Cita
  #4  
Antiguo 10-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo uso una solución básicamente igual que la de ecfisa:

Código Delphi [-]
function  EstaAbiertoForm (cNombre : string) : boolean;
var
  i : integer;
begin
  Result := false;
  for i := 0 to Screen.FormCount - 1 do
    if Pos (LowerCase(Screen.Forms[i].Name),  LowerCase(cNombre) ) > 0 then
    begin
      Result := true;
      break
    end
end;
Responder Con Cita
  #5  
Antiguo 10-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Cita:
Empezado por newtron Ver Mensaje

Yo uso esta forma:

if Formulario = nil then
Formulario := TFormulario.Create(Self);
Formulario.Show;
Es una alternativa muy óptima la que mencionas , ya que no se necesita recorrer con un ciclo todos formularios en pantalla para hacer la búsqueda...Sin embargo para poder usarla hay que asegurarse que al momento de cerrar y destruir el formulario hay que ponerlo a nulo (nil) osea hacer:
Código Delphi [-]
Formulario := nil;
Eso lo podemos hacer en en evento OnDestroy del formulario por ejemplo.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #6  
Antiguo 10-02-2011
mbguantay mbguantay is offline
Miembro
 
Registrado: abr 2006
Posts: 22
Poder: 0
mbguantay Va por buen camino
Gracias!!

Muchas Gracias por las respuestas!! Ya pruebo las que me dijeron pero infinitamente gracias.
Responder Con Cita
  #7  
Antiguo 10-02-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Otra solución aún mas simple es la siguiente:

En el evento que dispara el timer, antes de mostrar la ventana, desactiva el timer y en el evento OnClose de la ventana lo vuelves activar. De esta manera el timer solo corre mientras no se está mostrando la ventana, que es el comportamiento deseado.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 10-02-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por AzidRain Ver Mensaje
Otra solución aún mas simple es la siguiente:

En el evento que dispara el timer, antes de mostrar la ventana, desactiva el timer y en el evento OnClose de la ventana lo vuelves activar. De esta manera el timer solo corre mientras no se está mostrando la ventana, que es el comportamiento deseado.
Es exactamente lo que iba a proponer! Te me has adelantado!
Creo que es la solución más simple y adecuada a este caso.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #9  
Antiguo 10-02-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por rgstuamigo Ver Mensaje
Es una alternativa muy óptima la que mencionas , ya que no se necesita recorrer con un ciclo todos formularios en pantalla para hacer la búsqueda...Sin embargo para poder usarla hay que asegurarse que al momento de cerrar y destruir el formulario hay que ponerlo a nulo (nil) osea hacer:
Código Delphi [-]Formulario := nil;

Eso lo podemos hacer en en evento OnDestroy del formulario por ejemplo.
Saludos...
.... tiquismiquis....
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
ClientdataSet como saber si esta abierto? Coco_jac Varios 4 13-04-2012 19:36:43
Como saber si un fichero está abierto RaulChemical API de Windows 13 30-12-2008 17:31:42
Como traer al primer plano un formulario abierto sin usar Show belpab OOP 3 27-09-2007 18:33:11
Como averiguar si una unit o datamodule ya está abierto jjoliveras OOP 2 20-06-2007 11:28:56
Como puedo comprobar que una Ttable ya está abierto pjmedina Varios 2 14-06-2006 12:32:34


La franja horaria es GMT +2. Ahora son las 08:49:12.


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