如何在Inno Setup中将VCL样式应用于基于DLL的表单?

时间:2014-02-16 00:47:13

标签: delphi dll delphi-xe2 inno-setup vcl-styles

我正在使用Inno Setup(Unicode)和一组我在Delphi XE2中编写的DLL。 DLL具有在安装向导/进度期间显示的VCL表单。

我在Inno Setup安装程序中尝试了implementing VCL Styles。一切都很好,除了在这些DLL中创建的表单。一些形式是皮肤,但不是全部......

Partial Skin

如您所见,表单的背景颜色,列表视图背景颜色和字体颜色已更改。但是,列表视图标题,进度条和表单的边框仍然是旧样式。

如何让这些DLL中的表单显示正确的样式?

1 个答案:

答案 0 :(得分:4)

Inno Setup的VCL Styles插件仅用于在Inno Setup中的窗体和控件上绘制样式。为了使这些DLL中的表单被剥皮,你需要从Inno Setup可以在文件名中传递的DLL中导出一个函数...

Inno设置

[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;