You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11开发的FMX应用在旧Windows系统中丢失样式求助

FMX自定义样式在Windows 7/8.1丢失的兼容性修复方案

这是典型的FMX框架版本兼容性问题,Delphi 11的FMX默认依赖Windows 10及以上系统的UI渲染接口,旧系统缺少这些支持导致样式失效,可通过以下思路修复:

1. 排查样式中的Win10专属元素

打开Style Designer检查自定义样式:

  • 避免使用Windows10专属的样式模板作为基础,切换到通用Windows模板重新设计;
  • 移除高版本系统特有的视觉效果,比如模糊背景、动态圆角、新的渐变填充类型等,这些在Win7/8.1中无法被正确渲染。

2. 基于系统版本加载适配样式

在代码中添加系统版本判断,为不同系统加载对应样式文件:

uses Winapi.Windows;

procedure TMainForm.FormCreate(Sender: TObject);
var
  OSVer: TOSVersionInfo;
begin
  OSVer.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  GetVersionEx(OSVer);
  
  // 区分Win7/8.1与Win10+系统
  if (OSVer.dwMajorVersion = 6) then
    StyleBook1.LoadFromFile('WinLegacy_Style.Style') // 适配旧系统的样式
  else
    StyleBook1.LoadFromFile('WinModern_Style.Style'); // 原Win10样式
end;

3. 修正应用兼容性声明

修改项目的Manifest文件,确保系统识别应用兼容旧版本Windows:

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  <application>
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Win7 -->
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> <!-- Win8 -->
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Win8.1 -->
    <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> <!-- Win10 -->
  </application>
</compatibility>

也可以在Delphi项目选项的Application > Manifest中勾选对应的兼容系统选项。

4. 测试默认样式的兼容性

暂时移除自定义样式,让组件使用FMX默认样式在Win7/8.1运行:

  • 如果默认样式正常,说明自定义样式存在不兼容元素,需逐一排查样式中的每个组件元素(比如TButton的StyleLookup属性、TRectangle的填充/边框设置等);
  • 如果默认样式也异常,需检查FMX框架的部署文件,确保旧系统上安装了必要的运行库(比如VclStylesFmx.dll等FMX相关依赖)。

样式效果对比

  • Windows 7/8.1样式丢失效果:Windows 7/8.1样式异常
  • Windows 10正常样式效果:Windows 10样式正常

内容的提问来源于stack exchange,提问作者Henrique Gama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:02:26