Vcl Style Utils - 摆脱默认表单图标

Jer*_*dge 3 delphi vcl-styles nonclient-area vcl-styles.-utils

我已经在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;
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

  1. 用完全空的.ico文件替换了表单的Icon.

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

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

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

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

  6. 删除biSystemMenu从窗体的BorderIcons属性,但是这也将删除表格的右上角的默认的按钮,迫使我把我自己的系统按钮那里.

如何完全取消窗体图标及其默认功能,以支持我的Windows 10样式后退按钮?

RRU*_*RUZ 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;
Run Code Online (Sandbox Code Playgroud)