3

在设计时的遗留应用程序中(在 32 位 WinXP 下的 Delphi 6 中创建,最近移植到 64 位 Win7 下的 Delphi XE2),标准控件看起来“现代”,带有颜色渐变等。虽然在运行时,它们看起来就像旧的 Win95 版本。

如果特别是 TPageControl 和 TTabControl 中的默认颜色不会让我很难判断当前选择了哪个选项卡,那我不会太困扰。

所以我的问题是:

  1. 什么会使主题在运行时不活跃?
  2. 是否可以轻松(例如通过 IDE 配置)使设计时间看起来像运行时间?

笔记:

  • 在项目选项中,我为每个现有目标启用了运行时主题。它没有帮助。
  • 我还尝试在包含这些控件的表单中启用 GlassFrame。不幸的是,运行时的外观和感觉没有主题。
  • 这个应用程序建立在许多我不掌握的内部和外部代码(只是站在巨人肩膀上的侏儒),但我可以使用它们的源代码。怀疑某些指令会在应用程序启动时禁用主题,我寻找了一些关键字,如“Theme”、“Skin”、“TStyleManager”、“SetWindowTheme”,希望自己解决这个问题。我找不到任何重要的东西(至少对我来说)。
  • 我尝试使用来自 Question Delphi XE2 VCL styles tutorial - how to change the style at runtime中的信息来测试一个小型应用程序,并且效果很好。
  • 剥皮我的应用程序不是我的目标。我只是希望能够在设计时直观地调整一些 GUI 元素,如果设计和运行时看起来相似,那就更容易了。
4

2 回答 2

6

事实证明,删除 dpr 文件中的“{$R *.res}”行会使主题不可用。

在D6下,我在项目中禁用了版本信息,将“{$R *.res}”替换为“{$R 'myApp.res' 'myApp.rc'}”,使用自己的rc文件来获取版本信息在一个单独的、易于编辑的文件中,而不是被迫通过项目选项。

在 XE2 下,这不再起作用,因为在构建过程中,Delphi 经常会覆盖资源(或者不考虑,我不太确定)。我不得不重命名 rc 文件,使其与应用程序名称不匹配,因此将 "{$R ' myApp .res' ' myApp .rc'}" 替换为 "{$R ' myApp_rc .res' ' myApp_rc .rc' }”。

再次放置“{$R *.res}”(连同“{$R 'myApp.res' 'myApp.rc'}”)似乎可以使主题正确,并且不会破坏版本信息。

谢谢布赖恩让我朝着好的方向发展。

于 2012-06-27T08:50:01.050 回答
1

根据我的经验,这通常是由于 DEBUG 模式(在 IDE 中默认使用)和 RELEASE 模式之间的项目差异造成的。打开您的项目选项并滚动到应用程序(其中定义了主题样式和图标)。请注意,顶部的平台和构建选项组合为每个设置保存单独的值,我希望您会发现您的 DEBUG 构建配置启用了运行时主题,但 RELEASE 没有。

于 2012-06-24T07:14:54.657 回答