Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Abrir un TForm dentro de un panel (https://www.clubdelphi.com/foros/showthread.php?t=61385)

afxe 05-11-2008 20:22:05

Abrir un TForm dentro de un panel
 
Explico: Tengo una ficha de articulos, donde se muestran sus datos básicos (descripción, marca, modelo, fabricante...) y además tengo un PageControl con varias pestañas donde muestro otro tipo de información: Una pestaña para tarifas, otra para estadisticas, otra para stock por almacenes, otra con los datos de los posibles proveedores.... el caso es que cuando abro la ventana se cargan un montón de querys, lo que ralentiza la apertura de la ficha de artículo cuando a lo mejor sólo quiero ver el stock que hay o las tarifas. Así que he pensada que en vez de usar un PageControl, poner botones o un TabControl y cada vez que lo pulse abrir el form correspondiente (con las querys consecuentes) dentro del form de la ficha de artículos, en un panel o un olecontainer o algo así (ojo, no estoy hablando de MDI). Puedo tener varias fichas de artículos abierta a la vez (la aplicación sí es MDI).

Gracias por vuestra colaboracion.

Caro 05-11-2008 20:33:24

Hola afxe, solo tienes que asiganrle al Parent del formulario tu panel.

Código Delphi [-]
 Form2.Parent := Panel1;
 Form2.Align:=alClient;
 Form2.Show;

Saluditos

afxe 05-11-2008 21:46:25

Gracias... había intendo eso, pero me dio un fallo de que no se podia pasar el foco a una ventana invisible y pensé que no era factible, con tu post me dí cuenta que el fallo vendría por otro motivo.

casacham 08-11-2008 20:33:45

La solucion a tus problemas
 
Aqui va un procedimiento que resuelve tu problema


Código Delphi [-]
 
procedure CargarFormulario(NuevaClase: TFormClass; NuevoForm: TForm;
                           Self: TComponent; Contenedor: TWinControl);
begin
      if Contenedor.ControlCount > 0 then begin
          if Contenedor.Controls[0] is NuevaClase then Exit;
          NuevoForm.Free;
          TCustomForm(Contenedor.Controls[0]).Free;
      end;
      if Assigned(NuevaClase) then begin
         Try
            NuevoForm := NuevaClase.Create(Self);
            Screen.Cursor:=crAppStart;
            with NuevoForm do begin
                 Hide;
                 BorderStyle := bsNone;
                 Parent      := Contenedor;
                 Align       := alClient;
//               OnClose     := NuevaFormaClose;
                 Show;
                 SetFocus;
                 Screen.Cursor:=crDefault;
            end;
         Except
           Screen.Cursor:=crDefault;
           ShowMessage('Error de formulario');
         end;
      end;
end;



MODO DE USO


Código Delphi [-]
 
 
procedure TF_Prin.IngresarNuevo1Click(Sender: TObject);
begin
  //CargarFormulario(TForm1,Form1,Self,PanelDondeQuieresQueTeCargueElForm);
  CargarFormulario(TF_PCTE,F_PCTE,Self,PanelForm);
end;


La franja horaria es GMT +2. Ahora son las 05:41: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