Ver Mensaje Individual
  #5  
Antiguo 04-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 23
gluglu Va por buen camino
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 :

Código Delphi [-]
  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.

Código Delphi [-]
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 !
__________________
Piensa siempre en positivo !
Responder Con Cita