Delphi表单,不带系统菜单,但带有关闭按钮

Delphi表单,不带系统菜单,但带有关闭按钮,delphi,Delphi,默认情况下,BorderStyle=bsSizeable的表单有一个系统菜单(左侧)和一个关闭按钮(右侧的“X”)。我想去掉系统菜单,保留关闭按钮 BorderIcons属性允许我删除系统菜单(通过biSystemmenu),但现在关闭按钮也消失了 有办法做到这一点吗 使用delphixe PS:就Windows而言,这应该是可能的:IE8的“InPrivate Filtering settings”窗口相当大,有一个关闭按钮,并且没有系统菜单。我认为没有办法做到这一点,而不依赖于自定义绘制非客

默认情况下,BorderStyle=bsSizeable的表单有一个系统菜单(左侧)和一个关闭按钮(右侧的“X”)。我想去掉系统菜单,保留关闭按钮

BorderIcons属性允许我删除系统菜单(通过biSystemmenu),但现在关闭按钮也消失了

有办法做到这一点吗

使用delphixe


PS:就Windows而言,这应该是可能的:IE8的“InPrivate Filtering settings”窗口相当大,有一个关闭按钮,并且没有系统菜单。

我认为没有办法做到这一点,而不依赖于自定义绘制非客户区,这在涉及玻璃时非常困难

考虑一下这种方法

procedure TMyForm.DeleteSystemMenu;
var
  SystemMenu: HMenu;
begin
  SystemMenu := GetSystemMenu(Handle, False);
  DeleteMenu(SystemMenu, SC_CLOSE, MF_BYCOMMAND);
end;

是的,它成功地从系统菜单中删除了关闭项,但也导致关闭按钮被禁用。因此,似乎一个按钮离不开另一个按钮。

BorderStyle:=bsSizeToolWin
做您想做的事情,X按钮的外观略有不同

所说的“系统菜单”是指标题栏左侧的图标吗?或通过右键单击调用弹出菜单

如果是要删除的图标-请使用以下代码:

const
  WM_ResetIcon = WM_APP - 1;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  protected
    procedure WMResetIcon(var Message: TMessage); message WM_ResetIcon;
  end;

implementation

procedure TForm1.FormShow(Sender: TObject);
begin
  PostMessage(Handle, WM_ResetIcon, 0, 0);
end;

procedure TForm1.WMResetIcon(var Message: TMessage);
const
  ICON_SMALL = 0;
  ICON_BIG   = 1;
begin
  DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_BIG, 0));
  DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_SMALL, 0));
end;

奇怪的是,对于我来说,
BorderStyle=bsDialog
的默认设置没有系统菜单,不管在
BorderIcons
中指定了什么<代码>双系统菜单需要在那里才能显示红色的X。你说得对,bsDialog确实按照我想要的方式工作。脸红;-)我已经更新了这个问题:我希望它也适用于bsSizeable。@Andreas-你是说自定义绘制按钮?我想你应该清楚:你想要摆脱的是图标,而不是菜单。右键单击标题栏始终显示菜单,无论左上角是否有图标。@Rob:是的,这是一种更好的说法,它似乎与所请求的相反。它显然保留了系统菜单(因为您正在修改它),但它禁用了按钮它删除了“大小”菜单项,因此您无法调整窗体的大小。@Rob请再次阅读我的答案。我想说的是,如果你去掉了部分系统菜单,那么标题栏上的匹配功能也会被禁用。事实上,你对Q的评论似乎也提出了类似的观点。但Windows Media Center肯定不会自定义画框吗?但它是可调整大小的,在右边有最小化、最大化和关闭按钮,有一个正常的系统菜单,但不在最左边显示系统菜单图标。@Andreas公认的解决方案显示了如何执行您描述的操作。最初的问题是想摆脱系统菜单,我相信你不能这样做,并保持一个功能关闭按钮。正如Rob指出的那样,你可以去掉图标,保留系统菜单,它仍然显示在ALT+SPACE、标题栏右键单击等等上。这太不一样了,这种不必要的差异是不必要的。@AndreasRejbrand谁是这种不必要的差异的作者?微软想在“普通窗口”和“工具窗口”之间做出区别吗?@user1580348:正确。工具窗口有更小的边框,这是非常有意的:小的、浮动的、位于顶部的窗口不应该有巨大的边框。以下是Microsoft Word 1997中的一个示例:。Word和“关于”对话框的标题栏很厚,但Office助手和浮动绘图工具栏(即工具窗口)的标题栏较小。