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 01-03-2009
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Post Mdi no repetir ventanas abiertas

Hola compañeros, llevo un tiempo desconectado del club por motivos personales y laborales, me guataria que me ayudaseis con el siguiente problema que tengo:

Tengo una Form padre y una serie de foms hijos, que creo según se solicita, no tengo problemas a la hora de crarlos, mediante

Código Delphi [-]
Tform.create(self);

Ni al destruirlos mediante el siguiente codigo en el evento Onclose del Form

Código Delphi [-]
Action:=Canfree;

El problema es que no se como evitar que si e abierto el Form de clientes lo pueda abrir de nuevo .
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 01-03-2009
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.096
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tienes varias formas de hacerlo, yo normalmente lo hago así:
Tengo una unit de funciones comunes y entre ellas está esta:

Código:
function AbreForm (Cclase : TFormClass; bMostrar: boolean; var Fnombre) : boolean;
(* bMostrar indica si el formulario se visualizará o no *)
var
  F : TForm;
begin
  result := true;
  F := Application.FindComponent (copy(cClase.ClassName,2,255)) as TForm;
  if assigned(F) and bMostrar then
  begin
    F.Show;
  end
  else
  begin
    try
      Application.CreateForm (Cclase, Fnombre);
      if bMostrar then
        (Application.FindComponent (copy(cClase.ClassName,2,255)) as TForm).Show;
    except
      if assigned(TForm(Fnombre)) then
        Error(3, TForm(Fnombre).name)
      else
        Error (3,'');
      result := false;
    end;
  end;
end;
Y la llamada sería algo así:
Código:
AbreForm(TFentradaUsuario,False,FentradaUsuario);
FentradaUsuario.ShowModal;
Si ya está creada (asignada), entonces se abre. Si no lo está, se crea.
También se puede hacer directamente;
Código:
AbreForm(TFentradaUsuario,True,FentradaUsuario);
Responder Con Cita
  #3  
Antiguo 01-03-2009
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Gracias por tu rápida respuesta Casimiro, me parase una idea genial lo de agregarla a un unit de funciones, lo probare a partir de mañana y te digo como me fue. Un día de estos tendrimaos que juntar las funciones que usamos en un único fichero de todos los miembros, nos ayudaría mucho.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #4  
Antiguo 02-03-2009
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.331
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
Creo que para esto se pueden usar las propiedades MDIChildCount y MDIChildren de TForm.

Por ejemplo para un form2 se puede preguntar si ya está entre los que están creados/abiertos.

Código Delphi [-]
var
  i:Integer;
begin

  // Revisar los formularios...
  for i := 0 to (Self.MDIChildCount - 1) do begin
    if (Self.MDIChildren[i] = form2) then begin
      // Nada
      MessageDlg('Ya está abierto...', mtInformation, [mbOK], 0);
      Exit;
    end;
  end;

  // Si llega a quí es que hay que crearlo.
  form2 := TForm2.Create(Self);

Puedes colocarlo dentro de un procedimiento para automatizarlo...
__________________
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
  #5  
Antiguo 02-03-2009
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.096
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Todos los días se aprende algo , nunca me había interesado por saber para qué servían esas propiedades tan "raras", incluso alguna vez he llegado a implementar algo parecido usando la propiedad 'tag'...
Responder Con Cita
  #6  
Antiguo 02-03-2009
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Personalmente me gusta la idea de trabajar con una funcion, pero también admito que es más lógico el método de Neftali para las MDI. De Todas maneras me da un error en la funcion Casimiro, imagino que por culpa de algún uses?, el error es Operator semi colon justo en
Código Delphi [-]
Error(3, TForm(Fnombre).name)
, si me podéis decir cual es el problema y como se podría, si es posible convertir el método proporcionado por Neftali a una funcion. Muchas Gracias
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
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
Barra de ventanas abiertas Vlady OOP 3 10-02-2009 10:40:12
Saber cuantas ventanas tengo abiertas caifan_0883 API de Windows 0 22-10-2008 00:26:55
For a todas las ventanas abiertas. rauros Varios 1 03-08-2008 22:07:59
Cantidad de VEntanas abiertas Paradiso Varios 1 22-06-2006 02:42:51
Ventanas abiertas Isaac Varios 3 11-02-2004 16:44:37


La franja horaria es GMT +2. Ahora son las 02:35:06.


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