3

我已经将此作为问题发布在 GitHub 上的 RRUZ 的 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;

到目前为止我已经尝试过:

  1. 将表单的图标替换为完全空的 .ico 文件。

  2. 将表单样式更改为 bsSizeToolWin,但标题栏变得太小,我失去了最小化/最大化按钮。

  3. 将表单样式更改为 bsDialog,但我得到与上面 #2 相同的效果,并且无法调整表单大小。

  4. 确保按钮样式为 nsPushButton,虽然它覆盖了表单图标,但单击该区域仍会单击该图标,而该图标又会显示默认的系统菜单。

  5. 遵循此线程中的所有内容,但结论是 Windows 强制您拥有此图标。

  6. biSystemMenu从表单的属性中删除BorderIcons,但这也删除了表单右上角的默认按钮,迫使我在那里放置自己的系统按钮。

如何完全消除表单图标及其默认功能以支持 Windows 10 样式的后退按钮?

4

1 回答 1

6

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;
于 2016-09-05T02:56:02.500 回答