Delphi 切换主题时 VCL 应用程序布局发生变化

Delphi VCL application layout changes when switching theme

我有一个玩具程序,它看起来像这样:

这是代码:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Clipbrd, System.Actions,
  Vcl.ActnList, Vcl.Themes, Vcl.StdActns;

type
  TForm1 = class(TForm)
    txt: TMemo;
    ActionList1: TActionList;
    act_change_theme: TAction;
    act_clear_text: TAction;
    is_autocopy: TCheckBox;
    is_autotrim: TCheckBox;
    procedure act_change_themeExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

var
  is_dark: Boolean;

implementation

{$R *.dfm}

procedure TForm1.act_change_themeExecute(Sender: TObject);
begin
  if is_dark then
  begin
    TStyleManager.TrySetStyle('Windows', false);
    is_dark := false;
  end
  else
  begin
    TStyleManager.TrySetStyle('Carbon', false);
    is_dark := true;
  end;

end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  is_dark := true;
end;
end.

当我使用快捷键 Ctrl+d 更改主题时,布局会发生一点变化。

怎样才能有一个固定的布局?您可以从 https://www.dropbox.com/s/gtbwis1c6p9j57l/editor.rar?dl=1

下载该项目

Windows 10 在客户区外用深色 1 像素宽的线条绘制 window 的边框。此外,在这条 1 像素线之外,它绘制了 6 或 7 像素宽的光影或可选的完全透明。 (阴影/无阴影可从 Performance 设置中选择。

大多数(如果不是全部)样式(我没有检查)以更传统的方式绘制边框,具有清晰可见的 7 像素宽边框。

此处以Windows10(无样式)为例:

这里是深色风格(Carbon):

最后还有Light风格

使用 LightCarbon 样式可以得到相似的明暗布局。