我尝试创建一个用户选择的样式保存到ini文件(JvFormStorage和JVIniFileStorage)的表单。我遇到的问题是如果我把我的代码放在OnCreate中它不起作用,在OnShow中工作但是我得到了错误:
"无法在OnShow或OnHide上更改Visible"
即使这是OnShow中的唯一代码,也可以是过程调用(Green1 a MenuItem但将转换为组合框选项)即:
Procedure TForm1.ChangeTheme;
begin
if Assigned(TStyleManager.ActiveStyle) then Begin
If (Green1.Checked) and (TStyleManager.ActiveStyle.Name<>'Light Green') then
TStyleManager.TrySetStyle('Light Green') else
... else
TStyleManager.TrySetStyle(fdefaultStyleName);
end;
也尝试过:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Form1.ChangeTheme;
Form1.Show;
Application.Run;
是否正常工作,但从普通窗口闪烁到样式&#39;并且如果可能的话不希望闪烁。
我可能完全以错误的方式解决这个问题。 谢谢保罗
答案 0 :(得分:4)
在您的情况下, OnCreate 事件是加载vcl样式的正确位置。
这是一个最小的样本工作应用程序,(应用程序必须包含“碳”和“金”样式)
项目代码
program Project2;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
表单代码
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Green1: TCheckBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Vcl.Styles,//including this unit init the vcl styles services.
Vcl.Themes;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
fdefaultStyleName : string;
begin
fdefaultStyleName:='Auric';
if StyleServices.Enabled then
If (Green1.Checked) and (not SameText(TStyleManager.ActiveStyle.Name,'Carbon')) then
TStyleManager.TrySetStyle('Carbon')
else
TStyleManager.TrySetStyle(fdefaultStyleName);
end;
<强> DFM 强>
object Form1: TForm1
Left = 520
Top = 299
Caption = 'Form1'
ClientHeight = 294
ClientWidth = 534
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 32
Top = 256
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
end
object Green1: TCheckBox
Left = 32
Top = 56
Width = 97
Height = 17
Caption = 'Green1'
TabOrder = 1
end
end