我想删除或禁用主菜单中的按钮,这些按钮控制我的应用程序的子表单(最小化,还原)。
应用程序应该看起来像“浏览器”,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;
我正在使用:
答案 0 :(得分:2)
你最终会打击让MDI成为现实的一切。而不是使用MDI,考虑使用框架。设计TFrame
后代来表示UI的一个屏幕。您可以将实例放在TPageControl
上以帮助组织它们。 (如果要提供自己的在屏幕之间导航的方法,请将每个页面的TabVisible
属性设置为false。)
答案 1 :(得分: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孩子保持最大化状态,用户无法恢复或最小化。
答案 2 :(得分:1)
MDI正是一种让from(child)浮动到另一个表单(parent)中的机制。无法看到永久最大化的观点。
如果您想分离代码并将其放在其他单元中,您可以使用框架(可以在设计时或运行时插入)或表格(使用以下代码)
procedure TParentForm.FormCreate(ASender: TObject);
begin
FEmbeddedForm := TEmbeddedForm.Create(self);
FEmbeddedForm.Parent := Panel1;
FEmbeddedForm.Align := alClient;
FEmbeddedForm.BorderStyle := bsNone;
FEmbeddedForm.Visible := True;
end;
答案 3 :(得分:0)
以某种方式使我无法接受的答案。相反,这对我有用: MDIChildForm.BorderIcons:= MDIChildForm.BorderIcons-[biSystemMenu];