1

ユーザーが選択したスタイルを 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;

動作しますが、通常のウィンドウから「スタイル」にちらつきます。可能であれば、ちらつきがないことをお勧めします。

私はこれを完全に間違った方法で回避している可能性があります。ありがとうポール

4

1 に答える 1

4

あなたの場合、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
于 2012-04-14T15:25:14.837 に答える