从资源中加载VCL样式

问题描述

任何人都有使用样式资源的经验。我正在开发一个为其创建自定义样式的程序。我们将其另存为.style和.vsf。因为我们不希望用户看到/更改程序的样式,所以我们希望将其包括在资源文件(.res)中。这将按照下一个链接中的说明进行:Customizing and Creating VCL Styles之后创建的文件(已测试带有.style和.vsf的文件)作为RC数据放置在Resourcefile中。 多数民众赞成在准备,现在什么都不起作用。 (tWinMain)

TStyleManager::SetStyle(TStyleManager::LoadFromresource((unsigned int)HInstance,"StyleName",RT_RCDATA));

这也不起作用:

TStyleManager::LoadFromresource((unsigned int)HInstance,RT_RCDATA);
TStyleManager::SetStyle("StyleName");

也不起作用

TStyleManager_TStyleServicesHandle MyStyle;
MyStyle = TStyleManager::LoadFromresource((unsigned int)HInstance,RT_RCDATA);
TStyleManager::SetStyle(MyStyle);

所有三种方法均导致错误消息:无效的样式句柄

文件加载相同样式的工作原理:

TStyleManager::LoadFromFile(stylePath + "StyleName.vsf");
TStyleManager::SetStyle("StyleName");

解决方法

我在Delphi(DX10.3)中遇到了同样的问题,以下内容对我有用

与“ TStyleManager :: LoadFromResource”基本相同,但未指定可选参数“ RT_RCDATA”。

MyStyle = TStyleManager::LoadFromResource((unsigned int)HInstance,"StyleName");
TStyleManager::SetStyle(MyStyle);

但是,资源类型“ VCLSTYLE”对于正确加载样式是必需的。在IDE中添加资源时,使用[项目]> [资源和图片...],您只能在对话框中指定RCDATA,这很不好。但是您可以直接使用键盘手动输入资源类型为“ VCLSTYLE”。 IDE会记住此设置,现在资源可以作为正确的类型使用。如前所述,它可以与Delphi 10.3一起使用,而对于Builder,则只需一次尝试即可。

Resource-type manual input in IDE dialog

最诚挚的问候,马蒂亚斯