Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2020
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
Controlar instancias de un Tform dentro de un TPanel

Amigos del foro, de antemano agradecerles su ayuda.
estoy tratando de meter muchos Forms dentro de un Panel mediante una función, pero al mismo tiempo quiero controlar las instancias de los formularios que ya se encuentran dentro del TPanel. Si ya esta dentro simplemente hacerlo visible a dicho form.
Código Delphi [-]
Procedure ShowFormTPanel( TfrmClass: TFormClass; bMultiInstace : boolean );
var
  i : SmallInt;
  F : TForm;
begin
  if not bMultiInstace then
    for i := TPanel1.ComponentCount - 1 downto 0 do
    begin
      F := TPanel1.Components[i];
      if F.ClassType = TfrmClass then
      begin
        F.BringToFront;
        Exit;
      end;
    end;

  with TfrmClass.Create(Application) do
  begin
    Parent   := TPanel1;
    Align    := alClient;
    Position := poMainFormCenter;
    Show;
  end;

end;

Para ser llamado así
Código Delphi [-]
ShowFormTPanel( TfClientes, False );
Por el momento no esta funcionando, necesito de ustedes.
Responder Con Cita
  #2  
Antiguo 01-04-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Yo para mostrar un formulario que no sé si ya ha sido creado uso esto:
Código Delphi [-]
   if not (Assigned(fFormulario)) then
      Application.createform(tfFormulario, fFormulario);
   fFormulario.show;
Responder Con Cita
  #3  
Antiguo 01-04-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por wilcg Ver Mensaje
Por el momento no esta funcionando, necesito de ustedes.

Estaría bien que dijeras porqué no está funcionando.
¿No te compila? ¿Te da un error? ¿Cual?
¿Si te compila, pero no hare lo que esperas?

Algunos comentarios más....
* No estás destruyendo los formularios que creas.
* Si pasas parámetros a la función, pasa también el panel (TPanel1)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 01-04-2020 a las 13:51:24.
Responder Con Cita
  #4  
Antiguo 01-04-2020
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 141
Poder: 19
aledieb Va por buen camino
Por que no recorres screen.forms podes buscar por nombre o por caption y cuando encontras el que te interesa haces screen.forms[nro].show
__________________
Suerte
Alejandro
Responder Con Cita
  #5  
Antiguo 01-04-2020
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
Gracias amigos por los aportes,
la idea de esta función es poder usarla de manera independiente desde toda la aplicación con tan solo invocar la función y una linea de código. Hasta el momento lo he hecho de esta manera y funciona perfecto, si hay un aporte en que se pueda corregir o mejorar excelente.
Código Delphi [-]
Procedure ShowFormTPanel( TfrmClass: TFormClass; Panel :TPanel );
var
  i : SmallInt;
  Lista: TList;
begin

  Lista := TList.Create;
  try
    Panel.GetTabOrderList(Lista);
    for i := 0 to Lista.Count - 1 do
      if TWinControl(Lista[i]) is TForm then
        if TForm(Lista[i]).ClassType = TfrmClass then
        begin
          TForm(Lista[i]).BringToFront;
          Exit;
        end;

    with TfrmClass.Create(Application) do
    begin
      Parent   := Panel;
      Align    := alClient;
      Position := poMainFormCenter;
      Show;
    end;

  finally
    Lista.Free;
  end;
end;

Uso:
Código Delphi [-]
ShowFormTPanel( TForm2, Pane1 );
y con respecto a liberar el form, en el evento OnClose de esta manera.
Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
Responder Con Cita
  #6  
Antiguo 01-04-2020
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Yo la modificaría un poco,
Código Delphi [-]
procedure ShowFormIn(frmClass: TFormClass; Container: TWinControl);
var
  i : Integer;
begin
  for i := Screen.FormCount-1 downto 0 do
  if Screen.Forms[i] is frmClass then
  begin
    Screen.Forms[i].BringToFront;
    Exit;
  end;
  with frmClass.Create(Application) do
  begin
    Parent   := Container;
    Align    := alClient;
    Position := poMainFormCenter;
    Show;
  end;
end;

De ese modo te permitirá usar diferentes contenedores, por ejemplo:
Código Delphi [-]
begin
  ShowFormIn(TForm2, Memo1);
  ShowFormIn(TForm3, Edit1);
  ShowFormIn(TForm4, Panel1);
  ShowFormIn(TForm5, ListBox1);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 01-04-2020
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
Maestro ecfisa, gracias por la corrección. Ahora si ya esta completa.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un TPanel dentro de un TPanel dentro de un TScrollBox TiammatMX OOP 6 10-02-2014 15:12:08
TForm y TFrame o TPanel se congela.... mrnovice OOP 0 03-09-2013 05:16:19
Crear instancias de objetos creados con TPanel Kandorf OOP 8 02-03-2010 08:43:56
Abrir un TForm dentro de un panel afxe OOP 3 08-11-2008 20:33:45


La franja horaria es GMT +2. Ahora son las 19:54:59.


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
Copyright 1996-2007 Club Delphi