【问题标题】:Delphi form without system menu but with close button没有系统菜单但有关闭按钮的 Delphi 表单
【发布时间】:2011-01-31 10:41:02
【问题描述】:

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

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

有没有办法做到这一点?

使用 Delphi XE

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

【问题讨论】:

  • 奇怪,对我来说BorderStyle=bsDialog 的默认值没有 有一个系统菜单,而不管BorderIcons 中指定了什么。 biSystemMenu 需要在那里才能显示红色 X。
  • 你说得对,bsDialog 确实按照我想要的方式工作。脸红 ;-) 我更新了问题:我希望它也适用于 bsSizeable。
  • @Andreas - 你的意思是自定义绘制按钮?
  • 我认为您应该清楚:您要摆脱的是图标,而不是菜单。右击标题栏总是显示菜单,不管左上角是否有图标。
  • @Rob:是的,这样说更好

标签: delphi


【解决方案1】:

BorderStyle := bsSizeToolWin 做你想做的事,只是 X 按钮的外观略有不同。

【讨论】:

  • -1。这太不同了,这种不需要的差异是不必要的。
  • @AndreasRejbrand 谁是这个不想要的差异的作者?微软想在“普通窗口”和“工具窗口”之间有所区别吗?
  • @user1580348:正确。工具窗口有更小的边框,这是非常有意的:小的、浮动的、停留在顶部的窗口不应该有很大的边框。以下是 Microsoft Word 1997 中的示例:Screenshot。 Word 和“关于”对话框的标题栏较粗,但 Office 助手和浮动绘图工具栏(它们是工具窗口)的标题栏较小。
【解决方案2】:

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

如果您要删除的是图标 - 使用此代码:

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;

【讨论】:

    【解决方案3】:

    我认为没有办法做到这一点而不诉诸自定义绘制您的非客户区域,这在涉及玻璃时非常困难。

    考虑这种方法。

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

    是的,它成功地从系统菜单中删除了关闭项目,但它也导致关闭按钮被禁用。所以看起来你不能没有另一个。

    【讨论】:

    • 这似乎与要求的相反。它显然保留了系统菜单(因为您正在修改它),但它禁用了按钮。
    • @987654322 也一样@它删除了“大小”菜单项,因此您无法调整表单的大小。
    • @Rob 再次阅读我的答案。我要说的是,如果您去掉部分系统菜单,那么标题栏上的匹配功能也会被禁用。事实上,你对 Q 的评论似乎也表达了类似的观点。
    • 但 Windows Media Center 肯定不会自定义框架绘制吗?然而它是可调整大小的,右侧有最小化、最大化和关闭按钮,并且有一个正常的系统菜单,但最左边没有显示系统菜单图标。
    • @Andreas 接受的解决方案显示了如何按照您的描述进行操作。最初的问题想摆脱系统菜单,我相信你不能这样做并保持一个正常工作的关闭按钮。正如 Rob 指出的那样,您可以摆脱图标,保留系统菜单,它仍然出现在 ALT+SPACE、标题栏右键单击等上。
    猜你喜欢
    • 2012-07-28
    • 2019-09-26
    • 2022-08-10
    • 1970-01-01
    • 2018-02-28
    • 2012-09-16
    • 2020-07-05
    • 2014-07-06
    • 2016-03-08
    相关资源
    最近更新 更多