Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ventana hija en un marco (Frame o Panel) de la ventana padre (https://www.clubdelphi.com/foros/showthread.php?t=49129)

birmain 13-10-2007 19:49:36

Ventana hija en un marco (Frame o Panel) de la ventana padre
 
Un saludo a todos los participantes.

Aunque he realizado unas cuantas aplicaciones en Delphi, jamás he usado la técnica MDI. Mi necesidad estriba en crear las ventanas hijas dentro del formulario principal en un marco, para utilizar la parte izquierda para otro tipo de controles. En principio me pareció un asunto que resolvería en unos minutos, pero llevo toda la tarde perdiendo el tiempo con ello, que aparentemente es sencillo.

Tras buscar en los foros no he encontrado nada, por lo que solicito vuestra amable ayuda.

Un saludo, y agradecido por anticipado.

xEsk 13-10-2007 22:58:59

Hola, aqui explican como empezar con el Delphi + MDI.

Si quieres mas información en Google busca por: "Delphi + MDI"

Saludos.

birmain 14-10-2007 09:27:56

Problema solucionado
 
En primer lugar, gracias a xEsk por su respuesta.

En realidad la solución es bastante simple. No se trata de hacer una aplicación MDI sino de simularla. Me explico:

1º En el formulario principal he puesto dos frames, uno alineado a la izquierda, un Splitter también alineado a la izquierda en vertical, y otro frame a la derecha, ocupando inicialmente la mayor parte del área del form.
Este frame será el cliente de todas las ventanas (Frame11)

Los formularios que se desé aparezcan no se deben autocrear, y los atributos de la propiedad FormStyle no pueden ser fsMDIChild. (No es una aplicación MDI, sino una simulación)


Código Delphi [-]
procedure TMainForm.CreaFormularioTablas;
 var   Tablas : TFormTablas;   
 i, nv  : integer; 

 begin   
   nv := 0;   
   for i := 0 to  Screen.FormCount-1 do         
   If Screen.Forms[i] is TFormTablas then Inc(nv);

 // esto impide una segunda instancia
  if nv = 0 then   
  begin     
    Tablas := TFormTablas.Create(Application);     
    with Tablas do       
    begin
        // Frame11 es el frame que va a ser el área cliente
        // y que está en el MainForm
        Parent := Frame11;         
        Show;       
    end;
  end;
end;



Este procedimiento se crea en el evento OnClick de uno de los items del menú principal, así cuantos se quieran. Todos deben cerrarse en su evento OnClose de la siguiente forma:

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

De esta forma se pueden crear tantos formularios como se quieran desde el menú principal


La franja horaria es GMT +2. Ahora son las 12:04:49.

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