在Delphi XE2中的create / show窗体上设置变量Style

时间:2012-04-14 07:50:17

标签: delphi delphi-xe2 vcl-styles

我尝试创建一个用户选择的样式保存到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;并且如果可能的话不希望闪烁。

我可能完全以错误的方式解决这个问题。 谢谢保罗

1 个答案:

答案 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