一. 选择和应用显示主题
二. 运行时切换主题
三. 可能出现的问题及解决方法
────────────────────────────────
一. 选择和应用显示主题
用 C++ Builder 写的 VCL 程序选择显示主题,需要选择菜单 Project -> Options
在左面目录找到 Application -> Appearance,右面的 Custom Styles 区域就是可以选择的主题列表,其中:
• 多选框列表是在这个程序里面可以使用的主题,例如上面截图选择了 Amakrits、Charcoal Dark Slate 和 Cyan Dusk 三个主题;
• Default style 是程序启动时默认使用的主题,上面截图选择了 Charcoal Dark Slate。如果选择了 Windows 那么就是操作系统默认的主题,相当于没有应用自定义的主题;
• Preview 按钮是预览主题的效果,在左面的列表里面点击选择一个主题,然后点击这个按钮,可以预览点击选择的那个主题的效果,例如上面截图选择了 Cyan Dusk 主题,下面的截图就是 Cyan Dusk 主题的预览效果。
例如现在有个程序的设计时效果如下:
由于按照本文前面 Default Style (默认主题) 选择了 Charcoal Dark Slate,运行时的效果如下:
二. 运行时切换主题
在项目设置里面,程序可用的主题是多选项,例如本文前面所述,选择了 Amakrits、Charcoal Dark Slate 和 Cyan Dusk 三个主题,那么程序就可以在这三个主题以及 Windows 系统默认主题之间切换。
切换主题的方法是使用
TStyleManager::SetStyle(L"主题名");
如果主题名是 Windows 就是使用操作系统默认主题,即不使用自定义主题。
例如使用前面的例子,在 Button1、Button2、Button3 和 Button4 的点击事件里面分别切换到这几个主题:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStyleManager::SetStyle(L"Amakrits");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TStyleManager::SetStyle(L"Charcoal Dark Slate");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TStyleManager::SetStyle(L"Cyan Dusk");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TStyleManager::SetStyle(L"Windows");
}
//---------------------------------------------------------------------------
点击 Button1 使用 Amakrits 主题的效果:
点击 Button2 使用 Charcoal Dark Slate 主题的效果:
点击 Button3 使用 Cyan Dusk 主题的效果:
点击 Button4 使用 Windows 主题的效果。由于测试程序在 Windows 10 操作系统里面运行的,看到的是 Windows 10 应用程序的效果 (如果在 Windows 7 或 XP 里面运行,看到的是 Windows 7 或 XP 应用程序的效果):
三. 可能出现的问题及解决方法
如果发现默认主题为 Windows 时,运行时切换主题没有效果,可以在 Project -> Options 里面选择主题时,默认主题选择除了 Windows 之外的其他主题运行一次,默认主题再选择 Windows 就可以了,在运行时切换主题就可以看到效果了。
如果用 API 函数修改了窗口的边框或标题样式,而不是通过 BorderStyle 属性修改的,可能会显示不正确,如果要切换主题,就尽量不要通过 API 函数修改边框或标题的样式。