PDA

Ver la Versión Completa : Aplicación MDI


Lenny
23-03-2010, 19:40:17
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:
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
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 [-] (http://www.clubdelphi.com/foros/#)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.




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:


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
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...