默认情况下,具有BorderStyle = bsSizeable的窗体有一个系统菜单(左侧)和一个关闭按钮(右侧为“X”)。我想摆脱系统菜单并保持关闭按钮。不带系统菜单但带关闭按钮的Delphi窗体
BorderIcons属性允许我删除系统菜单(通过biSystemmenu),但现在关闭按钮也消失了。
有没有办法做到这一点?
用Delphi XE
PS:应该可以尽可能的Windows而言:IE8的“InPrivate筛选设置”窗口是相当大的,有一个关闭按钮,并没有系统菜单。
默认情况下,具有BorderStyle = bsSizeable的窗体有一个系统菜单(左侧)和一个关闭按钮(右侧为“X”)。我想摆脱系统菜单并保持关闭按钮。不带系统菜单但带关闭按钮的Delphi窗体
BorderIcons属性允许我删除系统菜单(通过biSystemmenu),但现在关闭按钮也消失了。
有没有办法做到这一点?
用Delphi XE
PS:应该可以尽可能的Windows而言:IE8的“InPrivate筛选设置”窗口是相当大的,有一个关闭按钮,并没有系统菜单。
我不认为有没有办法做到这一点,而不诉诸非客户区,这是非常困难的时候涉及玻璃。
考虑这种方法。
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;
奇怪了,对我来说,默认`边框= bsDialog`并没有** **系统菜单不管是什么在`BorderIcons`中指定。 `biSystemMenu`需要在那里才能显示红色的X. – 2011-01-31 10:59:12
你说得对,bsDialog确实按我想要的方式工作。腮红;-)我已经更新了这个问题:我希望它也适用于bsSizeable。 – Giel 2011-01-31 11:13:59
Windows Media Center – 2011-01-31 11:39:15