Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-12-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
Optimizando Creación de Formularios MDI

Hola Gente,

Ando ya varios dias buscando pero no con mucha suerte algo referente a una duda que tengo en esto de las aplicaciones MDI.

Todo esta ok con referente al formulario padre e hijos, llamados, liberacion de memoria etc, funciona de 10, pero mi aplicación tiene como 30 Forms child y a la hora del llamado es algo engorroso a lo cual se viene mi duda de tener una funcion o procedimiento que me pueda crear mis formularios child ya establecidos.

Llamo a los formularios de la sgte forma:


Código Delphi [-]
  if not Assigned(frmC1) Then begin
    frmC1 := TfrmC1.Create(Application);
    frmC1.Show;
  end
  else begin
    if frmC1.WindowState = wsMinimized then  frmC1.WindowState := wsNormal;
    frmC1.BringToFront;
  end;




Ahora me entenderan de poner todo eso en los mas de 30 onlclick para llamar a los Forms que tengo en la aplicacion, por eso me parece que un procedimiento .....


Código Delphi [-]
       LlamarFormularioChild(NombreForm) ;

.... seria mucho más practico pero nose como hacerlo.

Pero de tanto revisar me encontre algo :


Código Delphi [-]
procedure TfrmParent.CrearVentanaMDIHija(Nombre: string);
begin
  LockWindowUpdate(Handle);
  with TFrmChild.Create(Self) do
  begin
    Caption := Nombre;
    if FileExists(Nombre) then
      reMain.Lines.LoadFromFile(Nombre);
    reMain.Modified := False;
    WindowState := wsMaximized;
  end;
  LockWindowUpdate(0);
end;


Pero no logro acoplarlo a mi codigo, porque el parametro es un string y mi frmC1 es un objeto TfrmC1.

Nota: Uso D7.

De antemano muchas gracias.

Última edición por nelostanley fecha: 18-12-2007 a las 14:55:54.
Responder Con Cita
  #2  
Antiguo 20-12-2007
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Creo que la instruccion FindComponent podría serte de ayuda para lo que quieres hacer, espero que así sea. puedes ver ejemplos de su utilización en estos hilos:

http://www.clubdelphi.com/foros/show...=FindComponent

http://www.clubdelphi.com/foros/show...=FindComponent

http://www.clubdelphi.com/foros/show...=FindComponent

Un saludo.
Responder Con Cita
  #3  
Antiguo 26-12-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
sigo penando ...

Esto de optimizar me parece complicado, revise tus hilos recomendados pero ninguno llena la expectativa, lo mio es aparentemente simple una funcion que cree los Form child, dichos form ya tiene sus componentes objetos etc.

De antemano muhas gracias.
Responder Con Cita
  #4  
Antiguo 04-01-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Servira esto?

Yo uso la siguiente funcion

Código Delphi [-]
function ShowForm(TfrmClass: TFormClass) : boolean;
begin
  with TfrmClass.Create(Application) do
  begin
    result := ShowModal = mrOk;
    Free;
  end;
end;

Y la llamo asi

ShowForm(tfrmVentas);

Se que son para ventanas modales pero podrias acomodarlas para MDI.

Saludos
Responder Con Cita
  #5  
Antiguo 04-01-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Yo uso una pequeña variante de jcarteagaf. Al hacerlo así, tenemos que añadir los "uses" de la ventana que queremos crear; con el tiempo y muchos Forms hijos, acabamos con referencias circulares y un dolor de cabeza.

Código Delphi [-]
type TOpen = (oCliente, oFactura, oProductos);

var  OpenForm : Array [TOpen] of TForm = (TFrmcliente, TfrmFactura, TFrmProductos);

function ShowForm(Abrir : TOpen) :TForm;
begin
 Result := TForm(OpenForm(Abrir)).Create(Application)
end;

El tipo "TOpen" lo añado a una unidad publica.pas (sin form asociado), todas las ventanas hacen uso de ella.

Cada ventana hija, tiene en el Onclose Action := cafree, por lo que se libera de memoria. Tampoco uso las variables globales FrmCliente, FrmFactura que propone delphi.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 04-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Yo uso un procedimiento como este:

Código Delphi [-]
procedure ShowMDIChildForm(AFormClass: TFormClass);
var
  I: Integer;
  AForm: TForm;

begin
  for I := 0 to Pred(Application.MainForm.MDIChildCount) do
  begin
    AForm := Application.MainForm.MDIChildren[i];
    if AForm is AFormClass then
    begin
      if IsIconic(AForm.Handle) then
        ShowWindow(AForm.Handle, SW_RESTORE);
      AForm.BringToFront;
      Exit
    end
  end;
  AFormClass.Create(nil)
end;

Saludos...
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
Formularios Caro OOP 13 08-08-2007 17:41:17
Formularios MDI CoCaInE OOP 6 25-12-2006 13:25:34
Creación dinamica de Formularios Caro OOP 2 25-01-2006 13:20:01
Formularios Caro Varios 5 14-07-2005 14:51:30
Formularios MDI mierteran Varios 1 03-12-2004 11:28:35


La franja horaria es GMT +2. Ahora son las 01:19:16.


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