FireMonkey:如何在所有表单运行时更改样式簿的样式?

Mic*_*lev 3 delphi styles firemonkey

我有 2 个样书加载了自定义样式,并希望它们立即应用于所有表单(在 Windows、Tokyo 10.2.3 上进行测试)。

procedure TForm6.Button1Click(Sender: TObject);
  begin
    StyleBook := StyleBook2;
  end;

  procedure TForm6.Button2Click(Sender: TObject);
  begin
    StyleBook := StyleBook1;
  end;
Run Code Online (Sandbox Code Playgroud)

如果我设置了UseStyleManager=true,则此代码不起作用。如果UseStyleManager=false,它有效,但仅适用于 1 种形式。

Tom*_*erg 5

您可以使用Application.Components[]来访问每个表单并设置其StyleBook属性。留给UseStyleManager = False两本样式书。

添加到主窗体:

type
  TForm14 = class(TForm)
    ...
  private
    procedure ChangeApplicationStyle(sb: TStyleBook);
Run Code Online (Sandbox Code Playgroud)

并实施:

procedure TForm14.ChangeApplicationStyle(sb: TStyleBook);
var
  i: integer;
begin
  for i := 0 to Application.ComponentCount - 1 do
    if Application.Components[i] is TForm then
      TForm(Application.Components[i]).StyleBook := sb;
end;
Run Code Online (Sandbox Code Playgroud)

最后要改变,例如:

procedure TForm14.Button1Click(Sender: TObject);
begin
  ChangeApplicationStyle(StyleBook1);
end;

procedure TForm14.Button2Click(Sender: TObject);
begin
  ChangeApplicationStyle(StyleBook2);
end;
Run Code Online (Sandbox Code Playgroud)