在运行时有条件地使用XPManifest是否可行?

10

我想让用户选择是否使用主题样式。是否有可能动态“加载”XPManifest文件?

如果用户接受主题样式,那么使用manifest文件,否则使用经典主题。 在程序启动时,对话框中的样式选择关闭后,我想要执行类似以下操作:

if UserWantsThemedStyle then
  LoadManifestSomehow
else
  UseClassicStyle;

在运行时实现这个是否可能?

谢谢。


1
请查看此问题:https://dev59.com/Gm855IYBdhLWcg3wXC5- - RRUZ
1个回答

12

您可以做到这一点。您需要使用激活上下文 API,它允许您在运行时激活不同的清单。我已经在Excel插件中使用它来启用主题。


谢谢。看起来就是我要找的东西。我找到了你的答案,但我不知道如何使用它。我正在使用Delphi 2009,所以我必须稍微修改你的代码才能编译。我会把它粘贴在我的问题中。 - TLama
我认为那个问题中的代码在Delphi 6中是可以的。当我编写它时,我正在使用D6。您可能需要将清单放入一个单独的DLL而不是exe文件中,以避免其被加载器捕获和应用。 - David Heffernan
是的,我现在明白了。那就是我的问题。所以如果我把它放到一个dll中并加载这个dll,那么我就可以让它工作了? - TLama
一种方法是将激活上下文代码放入DLL中,并使加载该DLL的操作执行激活。或者,您可以只使用纯资源DLL包含清单并从exe中激活它。看着我的代码,我不明白为什么要同时设置lpSource和hModule。那似乎是不必要的。 - David Heffernan
实际上,再次查看激活上下文文档,似乎你可以只提供一个文件而不是绑定资源。这对你来说可能更容易,特别是在测试时。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接