PDA

Ver la Versión Completa : Maximizar forms MDIChild


novato03
04-09-2007, 07:20:13
Hola estimados amigos del clubdelphi, tengo un formulario fsMDIForm y otras formas fsMDIChild, el asunto es que cuando maximizo los formularios hijos, estos abarcan todo el formulario padre, osea es como si se fusionaran con el formulario padre en uno solo, si alguien me puede decir como le hago para evitar que esto sucede, que cuando esta maximizado se pueda distinguir un formulario de otro, saber cual es el child y cual es el principal.:confused:

Espero haberme expresado correctamente. Gracias de antemano.

dec
04-09-2007, 07:27:12
Hola,

¿Te fijaste si en la esquina superior derecha del formulario padre (creo que en realidad del hijo) no aparecen los típicos botones "minimizar", "maximizar" y "cerrar"? Más arriba podrás ver los botones pertenecientes al formulario principal, esto es, que, en cierto modo puede notarse visualmente que hay un formulario hijo... por lo menos mediante dichos botones. Lo que no sé ahora mismo es si dichos botones aparece sólo si el formulario principal cuenta con un "Menú" (TMainMenu).

enecumene
04-09-2007, 17:42:12
Hola Novato03, revisaste si los formularios hijos tienen la propiedad formstyle como fsMDIChild y no fsNormal?

saludos..

novato03
04-09-2007, 18:18:01
Estan como MDIchild, ya lo he revisado, pero nada.:confused:

gluglu
04-09-2007, 18:40:40
Que yo sepa no se puede evitar dicho comportamiento en aplicaciones MDI.

Lo que yo hago es interceptar el botón maximizar del MDIChild e impedir que se 'maximize' de la manera que describes.

Una propuesta sería que en vez de 'maximizarse' como tal, y comportarse como se ha descrito, se 'aumente' el tamaño del form hijo al máximo permitido de la pantalla padre, quedando el form hijo con sus bordes de ventana, etc.

Yo, en mi caso particular, no permito 'maximizar' los forms hijos, sino que al pulsar el boton de maximizar del hijo, en caso de que el usuario haya cambiado previamente el tamaño del hijo, lo devuelvo a los valores máximos que he definido en la propiedad constraints.

Para interceptar la pulsación sobre el bóton de maximixar, puedes utilizar esto en tu formulario hijo :

private
{ Private declarations }
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;


procedure TFormHijo.WMSysCommand(var Msg: TWMSysCommand);
var
Was_Minimized : Boolean;
begin

Was_Minimized := False;

if (Msg.CmdType = SC_MAXIMIZE) then begin
if WindowState = wsMinimized then Was_Minimized := True;
WindowState := wsNormal;
Height := Constraints.MaxHeight;
Width := Constraints.MaxWidth;
BorderIcons := BorderIcons - [biMaximize];
end
else DefaultHandler(Msg);

if (Msg.CmdType = SC_MINIMIZE) then begin
BorderIcons := BorderIcons + [biMaximize];
end;

if (Msg.CmdType = SC_RESTORE) or (Was_Minimized) then begin
if (Height = Constraints.MaxHeight) and
(Width = Constraints.MaxWidth) then
BorderIcons := BorderIcons - [biMaximize];
end;

end;

En este código, además si el form hijo tiene el tamaño máximo establecido, lo que hago es inhabilitar el botón de maximizar. Y sólo lo habilito cuando el usuario cambia el tamaño del form.

procedure TFormHijo.FormResize(Sender: TObject);
begin
if (Width <> Constraints.MaxWidth) or
(Height <> Constraints.MaxHeight) then
BorderIcons := BorderIcons + [biMaximize]
else
BorderIcons := BorderIcons - [biMaximize];
end;

Espero te sirva de ayuda ! ;)