2

我想删除或禁用主菜单中的按钮,这些按钮控制我的应用程序的子表单(最小化、恢复)。

删除红色矩形处的按钮

应用程序应该看起来像一个“浏览器”,其中 MDI 子窗体必须始终保持最大化。

我已经尝试通过设置禁用它们

BoderIcons := [biSystemMenu];

但我得到了这个:

纽扣

我已经尝试在 WM_INITMENU 消息中禁用菜单命令,但没有成功:

procedure WMInitMenu(var Message: TWMInitMenu); message WM_INITMENU;

procedure TMyMDIChildForm.WMInitMenu(var Message: TWMInitMenu);
begin
  inherited;
  EnableMenuItem(Message.Menu, SC_MAXIMIZE, MF_BYCOMMAND or MF_GRAYED);
  EnableMenuItem(Message.Menu, SC_MINIMIZE, MF_BYCOMMAND or MF_GRAYED);
end;

我在用着:

  • 德尔福 7.1 企业版
  • 视窗 7 专业版 x64
4

4 回答 4

2

你最终将与所有使 MDI 成为现实的事物作斗争。考虑使用框架,而不是使用 MDI。设计一个TFrame后代来代表你的 UI 的一个屏幕。您可以将实例放在 a 上TPageControl以帮助组织它们。TabVisible(如果您想提供自己的在屏幕之间导航的方法,请将每个页面的属性设置为 false。)

于 2013-10-01T12:47:13.673 回答
2

我通过在 MainForm 上拦截 WM_COMMAND 来解决,如下代码所示:

type
  TMDIMainForm = class(TForm)
  protected
    procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
  end;

implementation

procedure TMDIMainForm.WMCommand(var Message: TWMCommand);
begin
  case Message.ItemID of
    SC_CLOSE, SC_MINIMIZE, SC_RESTORE, SC_MAXIMIZE:
      begin
        Message.Result := 0;
        Exit;
      end;
  else
    inherited;
  end;
end;

在子表单中,我简单地放置了这个:

procedure TMDIChild.OnCreate(Sender: TObject);
begin
  WindowState := wsMaximized;
end;

现在我的 MDI 孩子保持最大化,用户无法恢复或最小化。

于 2013-10-09T18:34:53.877 回答
1

MDI 正是一种使 from(子)浮动在另一个表单(父)中的机制。看不到将其永久最大化的意义。

如果您想要分离代码并将其放在其他单元中,您可以使用框架(可以在设计时或运行时插入)或表单(使用以下代码)

procedure TParentForm.FormCreate(ASender: TObject);
begin
  FEmbeddedForm := TEmbeddedForm.Create(self);
  FEmbeddedForm.Parent := Panel1;
  FEmbeddedForm.Align := alClient;
  FEmbeddedForm.BorderStyle := bsNone;
  FEmbeddedForm.Visible := True;
end; 
于 2013-10-01T14:44:15.573 回答
0

不知何故,接受的答案对我不起作用。这对我有用: MDIChildForm.BorderIcons := MDIChildForm.BorderIcons - [biSystemMenu];

于 2018-08-12T03:34:15.787 回答