Delphi如何防止MDI子窗口最大化?

4
在Delphi MDI应用程序中,当最大化按钮被按下时,需要在Mainform客户区显示一个带有其标题的子窗口。使用以下方法:
Win32Check(Windows.GetClientRect(ClientHandle, aTRect));

MDIChild1.BoundsRect := aTRect;

函数。

那么,当最大化按钮被按下时,我们如何防止 MDI 子窗体被最大化?

我尝试使用以下代码进行防止:

procedure TChildText.WMSYSCOMMAND(var Message: TWMSYSCOMMAND);
var
  aTRect:TRect;
begin
  inherited;
  case message.CmdType of
    SC_MAXIMIZE: 
      begin
        Win32Check(Windows.GetClientRect(MainForm.ClientHandle, aTRect));
        BoundsRect := aTRect;
      end;
  end;
end;

没有结果。


请显示完整的消息处理程序。 - David Heffernan
那里的代码无法阅读,请删除该评论并将代码编辑到问题中。请注意格式,使代码尽可能易读。目前问题中的代码很混乱。这些细节非常重要。 - David Heffernan
感谢您的编辑。我想找出的是是否有调用继承处理程序。 - David Heffernan
为什么不直接从“BorderIcons”中删除“biMaximize”,以避免首先进行最大化呢? - Honza R
2
因为否则用户需要手动调整窗口大小以适应客户区域,@Honza。这样,使用最大化按钮会自动“几乎”最大化窗口。这里的目标是略微重新定义最大化的含义,而不是完全禁用它。 - Rob Kennedy
显示剩余2条评论
1个回答

1
procedure TChildText.WMSYSCOMMAND(var Message: TWMSYSCOMMAND);
var
  aTRect:TRect;
begin
  if message.CmdType = SC_MAXIMIZE then
  begin
    Win32Check(Windows.GetClientRect(MainForm.ClientHandle, aTRect));
    BoundsRect := aTRect;
    message.CmdType := SC_RESTORE;
  end;
  inherited;
end;

3
如果这解决了你的问题,那么你可以使用 else inherited; 替代 Exit。在任何情况下都要将 Message.Result 返回为 0。 - TLama
2
你是对的。但今天我注意到,当MDI子窗口被最小化时,最大化按钮不起作用。因此,我将消息的CmdType设置为SC_RESTORE,而不是退出命令。 - Avrob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接