Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Abrir formulario solo una vez (https://www.clubdelphi.com/foros/showthread.php?t=65972)

morfeo21 25-01-2010 18:45:58

Abrir formulario solo una vez
 
Hola, que tal?

Mi problema es el siguiente:


Tengo un formulario MDI Parent y un formulario MDI Children. Al hacer clic en el boton para abrir el formulario children me lo abre como tantas veces haga clic en el boton sin importar si el form ya esta abierto o no. Como puedo solucionar esto?. gracias de Antemano

:o

el codigo que utilizo es el siguiente:
en el formulario

Código Delphi [-]
procedure XOrdenCompra001(Owner:TComponent);
 Begin
  FrmOrdenCompra001:=TFrmOrdenCompra001.Create(Owner);
  FrmOrdenCompra001.Show;
End;

cuando lo llamo
Código Delphi [-]
   XOrdenCompra001 (Self)

AÑADIDO (Neftalí): Utiliza etiquetas cuando coloque código Delphi.

rgstuamigo 25-01-2010 18:50:20

Cita:

Empezado por morfeo21 (Mensaje 351800)
Hola, que tal?

Mi problema es el siguiente:


Tengo un formulario MDI Parent y un formulario MDI Children. Al hacer clic en el boton para abrir el formulario children me lo abre como tantas veces haga clic en el boton sin importar si el form ya esta abierto o no. Como puedo solucionar esto?. gracias de Antemano

:o

Seria muy, pero muy interesante, si pusieras el código de como abres el formulario.;).
Saludos...:)

look 25-01-2010 18:58:33

Cita:

Empezado por morfeo21 (Mensaje 351800)
Hola, que tal?

Mi problema es el siguiente:


Tengo un formulario MDI Parent y un formulario MDI Children. Al hacer clic en el boton para abrir el formulario children me lo abre como tantas veces haga clic en el boton sin importar si el form ya esta abierto o no. Como puedo solucionar esto?. gracias de Antemano

:o

Código Delphi [-]
  if not Assigned(Form2) then
  begin
    Form2:=TForm2.create(nil);
  end
  else
  begin
    Form2.show;
  end;

Caro 26-01-2010 14:24:39

Hola morfeo21, como te indican deberías utilizar la función Assigned, pero si en el OnClose de tu MDIChild liberaras con Action:=caFree; solo va a funcionar la primera ves ya que no te lo pone a nil, por lo que la siguiente ya no se abriría tu formulario.

Código Delphi [-]
//En el OnClose liberas con FreeAndNil
procedure TForm2.FormClose(.....);
begin
 FreeAndNil(Form2);
end;
 
//Y en la llamada a tu MDIChild
if Not Assigned(Form2) then
  Form2:=TForm2.create(Self);

Saluditos

jcarteagaf 26-01-2010 15:33:04

Tengo una funcion que me hace precisamente eso

Código Delphi [-]
procedure ShowFormMDI(TfrmClass: TFormClass;bMultiInstace : boolean);
var
  i : SmallInt;
  F : TForm;
begin
  if not bMultiInstace then
    for i := Application.MainForm.MDIChildCount - 1 downto 0 do
    begin
      F := Application.MainForm.MDIChildren[i];
      if F.ClassType = TfrmClass then
      begin
        if F.WindowState = wsMinimized then
           F.WindowState := wsNormal;
        F.BringToFront;
        Exit;
      end;
    end;
  with TfrmClass.Create(Application) do
    Show;
end;

y lo llamo de la siguiente forma

Código Delphi [-]
ShowFormMDI(TFormaHija,false);

El segundo parametro te indica si se permite o no que se llame mas de una vez al formulario. Si no lo permites y el formulario esta abierto lo activara.

Espero te sirva

Saludos.

morfeo21 27-01-2010 16:19:13

Gracias Caro era justo lo que necesitaba ya lo estoy implementando en mi proyecto, siempre hay algo que se aprende todos los dias

hectormea 12-06-2013 02:38:09

gracias
 
Cita:

Empezado por Caro (Mensaje 351851)
Hola morfeo21, como te indican deberías utilizar la función Assigned, pero si en el OnClose de tu MDIChild liberaras con Action:=caFree; solo va a funcionar la primera ves ya que no te lo pone a nil, por lo que la siguiente ya no se abriría tu formulario.

Código Delphi [-]
//En el OnClose liberas con FreeAndNil
procedure TForm2.FormClose(.....);
begin
 FreeAndNil(Form2);
end;
 
//Y en la llamada a tu MDIChild
if Not Assigned(Form2) then
  Form2:=TForm2.create(Self);

Saluditos




:D
muchas gracias soy nuevo en estoy y me a servido mucho!


La franja horaria es GMT +2. Ahora son las 12:13:53.

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