【问题标题】:Set variable Style on create / show form in Delphi XE2在 Delphi XE2 中的创建/显示表单上设置变量样式
【发布时间】:2012-04-14 07:50:17
【问题描述】:

我正在尝试创建一个将用户选择的样式保存到 ini 文件(JvFormStorage 和 JVIniFileStorage)的表单。我遇到的问题是,如果我将代码放在 OnCreate 中它不起作用,在 OnShow 中起作用但我收到错误:

“无法在 OnShow 或 OnHide 中更改 Visible”

即使这是 OnShow 或过程调用中的唯一代码(Green1 是 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;

确实有效,但会从普通窗口闪烁到“样式化”,如果可能,不希望闪烁。

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

【问题讨论】:

    标签: delphi delphi-xe2 vcl-styles


    【解决方案1】:

    在您的情况下,OnCreate 事件是加载 vcl 样式的合适位置。

    这是一个最小的示例工作应用程序,(应用程序必须包含“carbon”和“auric”样式)

    项目代码

    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
    

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2013-07-03
      • 2014-08-18
      • 2012-02-11
      • 2012-02-26
      • 2012-08-25
      • 2012-02-07
      • 2012-01-20
      • 1970-01-01
      相关资源
      最近更新 更多