1. 重载MDIChild的WndProc方法,自己处理WM_SYSCOMMAND消息:
procedure Form1.WndProc(var msg: message);
begin
  case msg.Message of
    ...
    WM_SYSCOMMAND:
      case wParam of
        SC_MAXIMIZE://Do nothing
        SC_MINIMIZE://Do nothing
      end;
  end;
  ...
end;2. 取得系统菜单句柄,然后逐一删除子菜单.

解决方案 »

  1.   

    设置Form的BorderIcon属性为None可以取消“最大化”、“最小化”和“关闭”按钮,但Alt+F4仍有效(要屏蔽参看前面的问题);如要窗体不能改变大小,可以设置FormStyle为bsDialog,要窗体不能移动设置窗体无标题栏即可。
      

  2.   

    jll: 对MDIChild无效。zoao: 试试下面方法
    var
      hSysMenu: HMENU;hSysMenu := GetSystemMenu( Form.Handle, FALSE );
    EnableMenuItem( hSysMenu, 菜单项标识号, MF_BYCOMMAND or MF_GRAYED );
    其中,菜单项标识号有:
    SC_CLOSE - 关闭
    SC_MAXIMIZE - 最大化
    SC_MINIMIZE - 最小化
    SC_MOVE - 移动
    SC_SIZE - 改变大小
    其它的命令请看WIN32 API帮助及MSDN:WM_SYSCOMMAND。
      

  3.   

    private
      procedure WMNCHitTest(var Msg: TMessage); message WM_NCHITTEST;procedure WMNCHitTest(var Msg: TMessage);
    begin
      inherited;
      Msg.Result := HTCLIENT;
    end;