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

如何在Delphi Alexandria的FireMonkey Windows应用中实现Win11风格控件圆角

解决方案总览

方案1:原生FireMonkey属性实现(无需调用Windows API,跨平台兼容)

  • 所有FireMonkey可视控件都自带Corners属性组,直接设置即可实现圆角:
    • 调整CornerRadius属性为需要的圆角数值即可,Win11官方推荐的控件圆角值为8px,窗体圆角为12px
    • 可通过Corners属性单独指定需要启用圆角的角(支持全部角/左上/右上/左下/右下独立配置)
    • 配套调整Stroke.Color为Win11风格的浅灰色边框,Fill.Color匹配系统主题色即可还原Win11设计风格
  • 如果需要贴合Win11的云母/亚克力特效,可配合TAlphaEffect控件调整透明度,叠加背景模糊效果实现

方案2:调用Windows API实现(仅Windows平台生效,完美匹配系统风格)

FireMonkey在Windows平台下编译时,主窗体以及每个放置了TWindowHandle组件的容器都可以获取合法的HWND句柄,并非完全不支持句柄操作

  • 第一步:获取窗体/容器HWND,引用FMX.Platform.Win单元后调用以下代码即可:
var
  TargetHWND: HWND;
begin
  // 获取主窗体HWND
  TargetHWND := WindowHandleToPlatform(Form.Handle).Wnd;
  // 如果需要获取控件对应的HWND,先把控件放入TWindowHandle容器,再获取该容器的句柄即可
end;
  • 第二步:调用Win11官方圆角API设置效果,配合编译指令仅Windows平台生效即可:
{$IFDEF MSWINDOWS}
uses
  Winapi.DwmApi;

procedure SetWin11RoundedStyle(ATargetHandle: HWND);
var
  RoundedAttr: DWORD;
begin
  RoundedAttr := DWMWCP_ROUND; // 调用系统默认圆角规则,自动适配系统风格
  DwmSetWindowAttribute(ATargetHandle, DWMWA_WINDOW_CORNER_PREFERENCE, @RoundedAttr, sizeof(RoundedAttr));
end;
{$ENDIF}

适配注意事项

  • 当系统版本低于Win11时,调用DwmSetWindowAttribute设置圆角的代码会自动失效,无需额外做版本判断,不会触发运行错误
  • 原生属性方案的显示效果在所有Windows版本上完全统一,不会随系统版本变化

内容的提问来源于stack exchange,提问作者Gordon Turner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:08