/ / Inno SetupでVCLスタイルをDLLベースのフォームに適用するには? - delphi、dll、delphi-xe2、inno-setup、vcl-styles

Inno SetupでDLLベースのフォームにVCLスタイルを適用するには? - delphi、dll、delphi-xe2、inno-setup、vcl-styles

私はInno Setup(Unicode)をDelphi XE2で書いているDLLのセットと一緒に使用しています。DLLには、インストールウィザード/進捗中に表示されるVCLフォームがあります。

私は試しました VCLスタイルの実装 私のInno Setupインストーラで。これらのDLL内で作成されたフォームを除いて、すべてがうまくいきます。フォームの一部はスキンですが、すべてではありません。

部分的な肌

あなたが見ることができるように、フォームの背景色、リストビューの背景色、およびフォントの色が変更されました。ただし、リストビューのヘッダー、進行状況バー、およびフォームの境界線は、依然として古いスタイルです。

これらのDLLのフォームを適切なスタイルで表示するにはどうしたらいいですか?

回答:

回答№1は4

Inno Setup用のVCL Stylesプラグインは、Inno Setupのフォームとコントロールにスタイルを描画するように設計されています。これらのDLLのフォームをスキンするには、Inno Setupがファイル名で渡すことができるDLLから関数をエクスポートする必要があります...

イノセットアップ

[Code]
#define public VclStyleFile "Carbon (2).vsf"

procedure DllLoadStyle(const StyleFilename: WideString);
external "DllLoadStyle@MyDLL.dll stdcall";

function InitializeSetup: Boolean;
begin
ExtractTemporaryFile("{#VclStyleFile}");
LoadVCLStyleW(ExpandConstant("{tmp}{#VclStyleFile}"));
DllInit; //Presumed your DLL needs to initialize / instantiate the form
DllLoadStyle(ExpandConstant("{tmp}{#VclStyleFile}"));
...
end;

Delphi DLL

uses
Vcl.Themes,

procedure DllLoadStyle(const StyleFilename: WideString); stdcall;
begin
TStyleManager.SetStyle(TStyleManager.LoadFromFile(StyleFilename))
end;

exports
DllLoadStyle;