VCL / FireMonkey の Style は、非常に簡単に見目麗しいアプリケーションを制作できます。
その反面、Style を Exe ファイルに入れるとファイルサイズが大きくなってしまいます。
Style はアプリケーションの本質とは関係ないため、Style によってファイルサイズが大きくなるのは避けたい所です。
すぐに思いつく簡単な解決策は、Style ファイルを外部に持つ、ということです。
こうすれば、Exe ファイルに取り込まれないのでファイルサイズが大きくなるのを防ぐ事ができる上、新しいスタイルの配布も簡単です。
しかし、デフォルトの vsf ファイルを配布しても良いのか?という懸念があります。
そこで、dockwiki を見てみると下記のようにあり
また、これらのスタイル(VCL スタイルまたは FireMonkey スタイル)はどれも、作成したアプリケーションと一緒に再配布することができます。この再配布可能なスタイル ファイルは、作成した製品のインストール ディレクトリ内の次の場所に置きます。デフォルトの vsf ファイルも再配布可能なようです。
\Redist\styles
では、実際に外部の Style ファイルを読むコードは、どうするかというと…次のようにします。
TStyleManager.LoadFromFile('VSFファイル');TStyleManager.TrySetStyle('スタイルの名前');
非常に簡単です。
とはいえ、毎回このコードを書くのは面倒なので StyleProvider というクラスを作ってみました。
このクラスを使うと指定のディレクトリにあるファイルを全部読み取り、スタイルをリストとして持ちます。
後は、Apply / ApplyByName メソッドを呼ぶだけです。
下記は、簡単な使用例です。
procedure TForm1.FormCreate(Sender: TObject);varName: String;begin// ディレクトリを指定して生成する// ここでは Exe と同じディレクトリを指定しているので// Debug / Release それぞれに style ファイルを置かねばならないStyleProvider :=TStyleProvider.Create(ExtractFilePath(Application.ExeName) + '\Redist\styles');// スタイルの名前を ListBox1 に追加for Name in StyleProvider doListBox1.Items.Add(Name);end;procedure TForm1.ListBox1Click(Sender: TObject);varIndex: Integer;beginIndex := ListBox1.ItemIndex;// ListBox1 がクリックされたとき、スタイルを変えるif (Index > -1) and (Index < ListBox1.Items.Count) thenStyleProvider.ApplyByName(ListBox1.Items[Index]);end;
良かったら使ってみてください。
0 件のコメント:
コメントを投稿