我已经在GitHub上发布了这个an issue on RRUZ's Vcl Style Utils库。但是,我想我也可以在这里得到一些帮助。
我正在使用VCL样式创建Windows 10用户界面,特别是使用“Windows 10 Dark”样式。我也在使用VCL Style Utils来添加按钮到标题栏中的非客户区域。我试图完全忽略表单图标及其默认功能,支持后退按钮,就像大多数新的Windows 10应用程序一样。
我正在尝试使用TNCControls
中的Vcl.Styles.NC
组件在表单的最左上角放置一个按钮。但是,当我在表单的图标上放置一个按钮时,无法在图标区域中单击该按钮。虽然我能够重叠图标,但点击标题栏的特定区域总是打开表单的系统菜单,而不是单击我放在那里的按钮。
点击那里我不希望弹出这个菜单:
我目前是如何创建此按钮的:
procedure TfrmTestMain.SetupTitleBar;
var
B: TNCButton;
begin
FNCControls:= TNCControls.Create(Self);
B:= FNCControls.ButtonsList.Add;
B.Style := TNCButton.TNCButtonStyle.nsTranparent;
B.BoundsRect := Rect(0, 0, 45, 32);
B.UseFontAwesome:= True;
B.Caption := '';
B.ImageAlignment:= TImageAlignment.iaCenter;
B.ImageStyle:= TNCButton.TNCImageStyle.isNormal;
B.ImageIndex:= fa_chevron_left;
end;
到目前为止我尝试过:
用完全空的.ico文件替换表单的Icon。
将表单样式更改为bsSizeToolWin,但标题栏变得太小,我丢失了最小化/最大化按钮。
将表单样式更改为bsDialog,但我获得与上面#2相同的效果,以及无法调整表单的大小。
确保按钮样式为nsPushButton,虽然它覆盖了表单图标,但单击该区域仍然会单击该图标,该图标又显示默认系统菜单。
关注everything in this thread,但结论是Windows会强制您拥有此图标。
从表单的biSystemMenu
属性中删除了BorderIcons
,但这也删除了表单右上角的默认按钮,迫使我在那里放置自己的系统按钮。
如何完全取消窗体图标及其默认功能以支持我的Windows 10样式后退按钮?
答案 0 :(得分:5)
TNCControls
组件包含ShowSystemMenu
属性。如果将值设置为 false ,则系统菜单将不会显示。
试试这个
uses
Vcl.Styles.Utils.Graphics;
procedure TfrmTestMain.FormCreate(Sender: TObject);
begin
SetupTitleBar;
end;
procedure TfrmTestMain.NCClick(Sender: TObject);
begin
ShowMessage('Hello');
end;
procedure TfrmTestMain.SetupTitleBar;
var
B: TNCButton;
begin
FNCControls:= TNCControls.Create(Self);
FNCControls.ShowSystemMenu := False; //Disable the system menu.
B := FNCControls.ButtonsList.Add;
B.Style := TNCButton.TNCButtonStyle.nsTranparent;
B.BoundsRect := Rect(0, 0, 45, 32);
B.UseFontAwesome:= True;
B.Caption := '';
B.ImageAlignment:= TImageAlignment.iaCenter;
B.ImageStyle:= TNCButton.TNCImageStyle.isNormal;
B.ImageIndex:= fa_chevron_left;
B.OnClick := NCClick;
end;