Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2008年04月06日] [更新 2015年10月03日] Delphi サンプルプログラム集
888_スキン変更用コンポーネント
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro
VCLSkin 5.50.10.11, AlphaControls 2015 v10.17 Lite Edition
888_XPSkinForm.zip [2,147 KB] 2015年10月03日版 (EXE 同梱)



  • 2010年07月15日
  • Delphi 2010 で動作確認
  • AlphaControls Lite Editonのテストを追加
  • 2015年10月03日
  • Windows 7 U64(SP1) + Delphi XE(UP1) Pro で動作確認




スキン変更用コンポーネント


Windows XP テーマのスキンを変更する方法をこのサイトでも紹介していますが,Delphi のアプリケーションだけでスキンを変更するためのコンポーネントもあります.例えば,
等です.有料版と,無料版,デモ版(試用版)等があります.また,スキン編集用のプログラムも提供されています.

Delphi XE2 では,VCL スタイルを使用して,アプリケーションの外観を変更することができるようになりました.[オプション] [アプリケーション] [表示] で設定し,実行時にも変更が可能です.





01_Link Rank の VCLSkin


VCLSkin コンポーネントのインストールは非常に簡単です.インストール,アンインストール用のプログラムが用意されています.デモプログラムも添付されています.


図1
インストール
  • Install.exe を実行するだけ
  • 設計時に,対象の Delphi のバージョンのフォルダにパスを通しておく
図2
スキン編集用プログラム
  • 実行ファイル名は Builder.exe
  • 既存のスキンの編集も可能
  • 思い通りのスキンにするのは結構大変かも知れない

VCLSkin コンポーネントの簡単なテストプログラムです.デモ版では,フォームのキャプションバーの Caption が VCLSkin Demo となります.


図3
設計時画面
  • SkinData コンポを配置
  • アプリ全体で同じスキンにする時はSkinFormtypeの値をstMainFormに,このForm だけにする場合は stOnlyThisForm にする
  • SkinData1 の Active プロパティを True
  • SkinStore プロパティでスキンファイルを指定する
図4
実行時画面
  • 設計時に SkinStore プロパティで指定したスキンで実行
  • 実行時に設定または変更するには,SkinFile プロパティを使用する
図5
Button1 クリックでスキン変更
  • スキンファイルを選択
図6
スキンが変わる
図7
スキン適用コントロール変更
  • xcMainMenu 以外を False にする
図8
実行結果
  • フォーム以外は通常のデザインとなる

リスト1
テストプログラムのコード
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSkinData, StdCtrls, Buttons, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    Edit1: TEdit;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    Label1: TLabel;
    SkinData1: TSkinData;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    RadioButton2: TRadioButton;
    RadioButton1: TRadioButton;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  OpenDialogの初期ディレクトリを設定
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
begin
  OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
end;

//=============================================================================
//  実行時にスキンを変更する
//  SkinFileプロパティを設定すると実行時にスキンの変更が可能
//  一方SkinStoreプロパティはEXE埋込みとなる
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Filter := 'スキンファイル(*.skn)|*.skn';
  if OpenDialog1.Execute then begin
    SkinData1.SkinFile := OpenDialog1.FileName;
  end;
end;

end.




02_AlphaControls Lite Edition


Free 版の AlphaControls Lite Edition をインストールしてテストしてみました.こちらのコンポーネントは,実行時にスキンファイルが必要です.
このコンポーネント群には,Delphi の各コンポーネントに該当するコンポーネントがあり,いくつかのプロパティとイベントが追加されています.


図9
インストール
  • 対象の Delphi のバージョンのフォルダにパスを通す
  • acntDelphiXE_r.dpk を開いてコンパイル
  • acntDelphiXE.dpk を開いて [インストール] [上書き保存]
図10
スキン編集用プログラム
  • ASkinEditor をダウンロード
  • 実行ファイルは,[Bin] フォルダ内の ASkinEditor.exe
  • 別途画像編集ソフトが必要
  • 既存のスキンの編集も可能
  • 思い通りのスキンにするのは結構大変かも知れない
  • これはタイトルバーの編集中

簡単なテストプログラムです.


図11
設計時画面
  • sSkinManager コンポを配置
  • SkinDirectory でスキンファイルのあるディレクトリを設定
  • SkinName プロパティでスキンファイルを指定
図12
実行画面(Windows 7)
  • これは XPLuna の場合
図13
別のスキン
  • これは SoapSky - Blue の場合
図14
フォームのみのスキン適用
  • SkinManager1 の ShinningRules プロパティの srThirdParty を False にした場合
  • ボタン等のデザインに変更なし
図15
Windows 10.asz の場合
  • Windows 10 のスタイル

リスト2
テストプログラムのコード
実行時にスキンファイルが必要
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, sSkinProvider, sSkinManager;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    RadioButton2: TRadioButton;
    RadioButton1: TRadioButton;
    Button1: TButton;
    Button2: TButton;
    sSkinManager1: TsSkinManager;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  スキンの設定
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);

  sSkinManager1.SkinDirectory := ExtractFileDir(Application.ExeName);
  sSkinManager1.SkinName := 'SoapSky - Blue.asz';
  sSkinManager1.Active   := True;
end;

//=============================================================================
//  実行時にスキンを変更する
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Filter := 'スキンファイル(*.asz)|*.asz';
  if OpenDialog1.Execute then begin
    sSkinManager1.Active        := False;
    sSkinManager1.SkinDirectory := ExtractFileDir(OpenDialog1.FileName);
    sSkinManager1.SkinName      := ExtractFileName(OpenDialog1.FileName);
    sSkinManager1.Active        := True;
  end;
end;

end.