Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   como evitar que un formulario MDICHILd se repita cada ves que lo llamo (https://www.clubdelphi.com/foros/showthread.php?t=73047)

granodetoro 29-03-2011 01:04:15

como evitar que un formulario MDICHILd se repita cada ves que lo llamo
 
hola,tengo un form1 con form.style:MDI con un menu principal y dentro de este ahy una opcion que dice formulario 1 y cuando damos clic , llama a otro formulario que es form2 con formstyle:MDIchild y resulta que si sigo dando clic sale una copia de form2 y si damos clic denuevo sigue apareciendo otra copia...bueno quiero que solo pueda aparecer una vez y no si doy clic que no salga otra copia de form2 ...ayuda

ContraVeneno 29-03-2011 02:15:52

La función "Assigned" te puede servir...


o puedes usar este ejemplo: Your Fist MDI Delphi Project en Delphi About

granodetoro 30-03-2011 00:58:42

como evitar que un formulario MDICHILd se repita cada ves que lo llamo
 
tengo un menu principal que llama a un formulario MDIchild entonce cada vez que lo llama el mismo formulario se repite y solo quiero que aparezca una vez

ayudar es aportar y no solo es postear lo0l
ayudenme

ecfisa 30-03-2011 01:08:18

Hola granodetoro.

Como verás he combinado tus dos mensajes, ya que aunque el título es diferente en los dos planteas la misma situación.
Por favor si no encontras respuesta a tu problema, continua preguntando en el mismo hilo.

Si tu deseo es cambiar el título por uno más significativo, podés solicitarlo a cualquier moderador.

Nota: Cambié el título por el del segundo mensaje, por ser este mas representativo de lo que buscas.

Un saludo.

granodetoro 30-03-2011 01:14:04

bueno grax ecfisa

ecfisa 30-03-2011 01:52:55

Hola granodetoro.

Aunque el C++ no es mi fuerte, intentá con este código que acabo de probar y no permite abrir el segundo form más de una vez:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 for(int i = MDIChildCount-1; i >= 0; i--)
  if(MDIChildren[i]->Name == "Form2"){
    MDIChildren[i]->BringToFront();
  return;
  };
  Application->CreateForm(__classid(TForm2), &Form2);
}

Tendrías que sacar 'Form2' (o como se llame tu segundo form ) de: Proyect->Options->Forms->'Auto-create forms'

Y también es buena idea agregar en el evento OnClose del segundo form:
Código:

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
 Action= caFree;
}

Sin lugar a dudas algún compañero experto en C++ te sugiera algún modo más elegante y eficiente de realizarlo, pero por ahora...;)

Un saludo.:)

movorack 30-03-2011 01:59:04

en realidad solo debes llamarlo como a otro form.... es decir...

Código Delphi [-]
if TFrmClientes = nil then
  Application.CreateForm(TFrmClientes, FrmClientes);
FrmClientes.show;

Aquí te pongo una función que me imagino la corregiran pero estoy usandola para crear los formularios:

Código Delphi [-]
procedure TFrmMain.CreateForm(AClass: TPersistentClass; FormName: String; ShowModal : Boolean);
  var
    Component : TComponent;
begin
  Component := Application.FindComponent(FormName);

  if not Assigned(Component) then begin
    try
      FindClass('T'+FormName);
    except
      classes.RegisterClass(AClass);
    end;
    Application.CreateForm(TComponentClass(AClass), Component);
  end;

  if Not ShowModal then
    TForm(Component).Show
  else begin
    TForm(Component).ShowModal;
    TForm(Component).Free;
  end;
end;

y entonces al tratar de crear o mostrar el formulario solo llamo:

Self.CreateForm(TPeriodosInv, 'PeriodosInv');

para ambas opciones, ten en cuenta que al cerrar el formulario debes liberarlo:

Código Delphi [-]
procedure TFrmMovimientos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  FrmMovimientos := nil;
end;

Saludos.

movorack 30-03-2011 01:59:55

jejejejeje.... no habia visto que era C....

que pena... TRAGAME TIERRA!


La franja horaria es GMT +2. Ahora son las 19:09:31.

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