Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Aplicación MDI (https://www.clubdelphi.com/foros/showthread.php?t=67003)

Lenny 23-03-2010 19:40:17

Aplicación MDI
 
Aplicación MDI

Nuevamente recurro a ustedes, por comodidad y sugerencia de un amigo estoy creando una aplicación MDI, todo bien aparte de algunos ajustes, solo tengo una duda. Cuando necesito “Abrir” una ventana Hija que corresponde a ingreso y edición de datos de empresa abre perfecto, cual es el problema??? Si vuelvo a presionar el botón por accidente o confusión se abre otra ventana idéntica, y otra, y otra, y otra, etc… hay alguna manera que no suceda esto??? Que solo se abra una sola vez y en caso de volver a presionar la opción quede en primer plano???
Adjunto el código que he estado utilizando hasta ahora:
Código Delphi [-]
procedure TPrincipal.Abrirempresa1Click(Sender: TObject);
var
Form: TForm;
begin
Form := TEmpresas.Create(self);
Form.FormStyle := fsMDIChild;
Form.OnClose := AlCerrar;
Form.Show;
end;
De antemano, Gracias...
Luis Francisco R.

look 23-03-2010 19:51:24

Cita:

Empezado por Lenny (Mensaje 357982)
Aplicación MDI

Nuevamente recurro a ustedes, por comodidad y sugerencia de un amigo estoy creando una aplicación MDI, todo bien aparte de algunos ajustes, solo tengo una duda. Cuando necesito “Abrir” una ventana Hija que corresponde a ingreso y edición de datos de empresa abre perfecto, cual es el problema??? Si vuelvo a presionar el botón por accidente o confusión se abre otra ventana idéntica, y otra, y otra, y otra, etc… hay alguna manera que no suceda esto??? Que solo se abra una sola vez y en caso de volver a presionar la opción quede en primer plano???
Adjunto el código que he estado utilizando hasta ahora:
Código Delphi [-]procedure TPrincipal.Abrirempresa1Click(Sender: TObject); var Form: TForm; begin Form := TEmpresas.Create(self); Form.FormStyle := fsMDIChild; Form.OnClose := AlCerrar; Form.Show; end;

De antemano, Gracias...
Luis Francisco R.


Código Delphi [-]

    if not Assigned(Form) then /// si no esta creado lo creamos
    Begin
        Form := TForm.Create(nil);
    END
    ELSE;
    Form.Show; /// si ya esta creado , lo mostramos

evento onClose del form

FreeAndnil(Form);

maeyanes 23-03-2010 19:57:16

Hola...

Para hacer lo que quieres, puedes hacer una búsqueda por el tipo de clase de la forma y si ya existe una instancia de esa clase, solo la mandas al frente:

Código Delphi [-]
procedure TPrincipal.AbrirEmpresa1Click(Sender: TObject);
var
  I: Integer;

begin
  for I := 0 to Pred(MDIChildCount) do
    if MDIChildren[i] is TEmpresas then
    begin
      MDIChildren[i].BringToFront;
      Exit
    end;
  with TEmpresas.Create(Application) do
  begin
    FormStyle := fsMDIChild;
    OnClose := AlCerrar;
    Show
  end
end;


Saludos...

Lenny 23-03-2010 20:05:23

Funciona!!!
 
Gracias a ambos, he utilizado la solución de maeyanes y esta perfecta para lo que necesito, estudiare igualmente la solución de look, gracias nuevamente, me han salvado una vez mas...


La franja horaria es GMT +2. Ahora son las 09:46:13.

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