如何在 delphi 中禁用外部 dll 形式的 vcl 样式

How to disable vcl styles on external dll forms in delphi

我在 Delphi 10.1 Berlin 中使用 VCL 样式和外部 DLL 时遇到问题。

我正在使用 Nitgen DLL 在我的应用程序中注册指纹。该过程由 NBSPCOM.dll.

中的 COM 对象处理

当我调用注册方法时,DLL 中的表单出现异常。显示Form背景、图片、控件等错误

如果我在 XE8 中编译应用程序,问题就消失了,一切正常。

我找不到 DLL 表单的 class 来尝试 VCL 样式挂钩。

部分表格截图:

原始形式

表格错误

当您使用 VCL Styles 时,本机 winapi 控件(Static、Button、RebarWindow32 等)使用 WH_CBT 挂钩设置样式,我猜 dll 使用的是 staticButton winapi 控件绘制图片背景的位置。为了克服这个问题,您可以使用 Vcl.Themes.TStyleManager.SystemHooks 属性 禁用这些控件的样式,例如

TStyleManager.SystemHooks := [];