以下是子窗体中截获最大化消息的过程,在Form2这个子窗体最大化时确实执行了此段代码,但是窗体没有受下面代码的控制而是直接最大化了,不知道为什么,当Form2是普通窗体的时候下列代码就会工作正常,Form1是父窗体,其中没有代码,所以没有列出,Form2也只有下列这一段代码。 
procedure TForm2.WndProc(var Message: TMessage);
var
  Msg:TWMGetMinMaxInfo;
begin
  if Message.Msg=WM_GETMINMAXINFO then
  begin
    with TWMGetMinMaxInfo(Message).MinMaxInfo^ do
    begin
      ptMaxSize.X := 200;
      ptMaxSize.Y := 200;
      ptMaxPosition.X := 99;
      ptMaxPosition.Y := 99;
    end;
    Message.Result := 0;
  end;    inherited WndProc(Message);
end;

解决方案 »

  1.   

    你试试procedure TForm2.WndProc(var Message: TMessage);
    var
      Msg:TWMGetMinMaxInfo;
    begin
      inherited WndProc(Message);  //把这条语句调到前面试试  if Message.Msg=WM_GETMINMAXINFO then
      begin
        with TWMGetMinMaxInfo(Message).MinMaxInfo^ do
        begin
          ptMaxSize.X := 200;
          ptMaxSize.Y := 200;
          ptMaxPosition.X := 99;
          ptMaxPosition.Y := 99;
        end;
        Message.Result := 0;
      end;end;
      

  2.   

    MaxSize.X := 200;
    MaxSize.Y := 200;
    限制了你的form最大化(窗体里的属性,你自个找找吧)
      

  3.   

    inherited WndProc(Message)前面加上ELSE.否则这个消息也会被默认处理.
      

  4.   

    to: edgethinking(死鬼) 已经试过了,不行,to billst(小石头)
    你的方法虽然可以控制窗体的大小,但是最大化后 最小化、最大化、关闭平三个系统按钮就会到菜单栏里,由于我是用toolbar做的菜单栏所以那样最大化后是看不到这三个系统按钮的,我也就是因为这个才想控制子窗体的最大化,让不最大化,只放大窗体。不知道还有没有什么好方法可以解决toolbar做菜单栏里可以显示系统按钮?
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
    TForm1 = class(TForm)
        Button1: TButton;
    private
    procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo); message WM_GetMinMaxInfo;
    public
    { Public declarations }
    end;var
    Form1: TForm1;implementation
    {$J+}
    {$R *.dfm}procedure TForm1.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
    begin
    inherited;
    with message.MinMaxInfo^ do
    begin
    ptMinTrackSize.X := 200;
    ptMinTrackSize.Y := 200;
    ptMaxTrackSize.X := 200;
    ptMaxTrackSize.Y := 200;
    end;
    Message.Result := 0;
    end;end.
      

  6.   

    to: forgetter() 
    我最初找到的原码就是你给我的这个,试了不行,我才改成了用wndProc来处理。
    这段代码其实并不是无效,它只是当是MDI窗体的子窗体时无效,当窗体是普通的单窗体这做代码就是有效的!!