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

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

我正在将 Inno Setup (Unicode) 与我在 Delphi XE2 中编写的一组 DLL 一起使用。 DLL 具有 VCL 形式,在安装向导/安装过程中显示。

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

Partial Skin

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

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

最佳答案

Inno Setup 的 VCL 样式插件仅设计用于在 Inno Setup 中的窗体和控件上绘制样式。为了让这些 DLL 中的表单换肤,您需要从 DLL 中导出一个函数,Inno Setup 可以在文件名中传递该函数...

创新设置

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

procedure DllLoadStyle(const StyleFilename: WideString);
  external '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94d0f8f8d8fbf5f0c7e0edf8f1d4d9edd0d8d8baf0f8f8" rel="noreferrer noopener nofollow">[email protected]</a> 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;

关于delphi - 如何在 Inno Setup 中将 VCL 样式应用到基于 DLL 的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805807/

相关文章:

delphi - 从 RawByteString 转换为字符串会自动调用 UTF8Decode 吗?

c++ - 在运行时加载和使用类型库 (.tlb)

java - 是否可以使用Java创建dll?

delphi - 带有应用内购买功能的Delphi XE2 iOS应用

delphi - 如何重现此代码完成错误?

delphi - Firemonkey ScrollBox 错误

delphi - 如何在使用 for-in 循环迭代时更新 TList?

delphi - FireMonkey3下检测本地IP地址

delphi - 为什么嵌套类型的范围不包括派生类?

c++ - 在 firemonkey 中加载一个 dylib