【问题标题】:delphi how to prevent a MDI child from being maximized?delphi如何防止MDI子被最大化?
【发布时间】:2014-12-14 17:05:41
【问题描述】:

在 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;

没有结果。

【问题讨论】:

  • 请显示完整的消息处理程序
  • 那里不可读。请删除评论并将该代码编辑到问题中。请注意格式,以使代码尽可能可读。目前问题中的代码是杂乱无章的。这些细节非常重要。
  • 我已经删除了继承;线,它的工作原理。谢谢。
  • 感谢您的编辑。是否有对继承处理程序的调用是我试图找出的。
  • 因为用户需要手动调整窗口大小以适应客户区@Honza。这样,使用最大化按钮“几乎”会自动最大化窗口。这里的目标是稍微重新定义最大化的含义,而不是完全禁用它。

标签: delphi mdi childwindow maximize-window


【解决方案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;

【讨论】:

  • 如果这解决了您的问题,那么您可以使用Exit 而不是else inherited;。在任何情况下都将 0 返回到Message.Result
  • 你是对的。但是今天我注意到,当 MDIchild 窗口最小化时,最大化按钮没有响应。所以,我设置了 message.CmdType:= SC_RESTORE.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
相关资源
最近更新 更多