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

如何修改TSelectionPoint非激活状态下的圆圈颜色?现有代码无效

解决TSelectionPoint非激活状态圆圈颜色修改问题

问题根源

你代码里查找的background并非TSelectionPoint非激活圆圈对应的样式资源名称,所以修改无效。TSelectionPoint默认样式结构中,非激活状态的圆圈对应的是名为Circle的TShape控件(不同Delphi版本可能略有差异,建议先通过遍历确认具体名称)。

方法一:通过OnApplyStyleLookup直接修改

修正代码,定位正确的样式资源并修改颜色:

sp1.OnApplyStyleLookup := DoApplyStyleLookup;
sp1.ApplyStyleLookup;

procedure TForm1.DoApplyStyleLookup(Sender: TObject);
var
  LSelectionPoint: TSelectionPoint;
  LCircle: TShape;
begin
  LSelectionPoint := Sender as TSelectionPoint;
  // 查找非激活状态的圆圈样式资源
  LCircle := LSelectionPoint.FindStyleResource('Circle') as TShape;
  if Assigned(LCircle) then
    LCircle.Fill.Color := TAlphaColorRec.Red; // 设置目标颜色

  // 如需修改激活状态颜色,可尝试查找'ActiveCircle'(部分版本存在该资源)
  // LCircle := LSelectionPoint.FindStyleResource('ActiveCircle') as TShape;
  // if Assigned(LCircle) then
  //   LCircle.Fill.Color := TAlphaColorRec.Blue;
end;

如果遍历后发现样式资源名称不是Circle,将代码中的名称替换为你实际看到的即可。

方法二:使用TStyleBook自定义样式(更稳定)

若需要全局统一修改或担心版本差异,建议采用TStyleBook:

  1. 在窗体上添加TStyleBook控件。
  2. 右键点击TStyleBook,选择Load Style...,加载FireMonkey默认样式文件(通常路径为C:\Program Files (x86)\Embarcadero\Studio\XX.X\Redist\styles\Fmx,例如Windows11.Style)。
  3. 右键点击TStyleBook,选择Edit Style...,打开样式编辑器。
  4. 在编辑器中找到TSelectionPoint的样式,展开后定位到对应非激活状态的Circle控件,修改其Fill.Color属性。
  5. 保存修改后的样式,将窗体的StyleBook属性设置为该TStyleBook控件,所有TSelectionPoint都会应用修改后的样式。

注意事项

  • 部分Delphi版本中TSelectionPoint的样式资源名称可能不同,可通过以下代码遍历确认:
    for var LChild in LSelectionPoint.Children do
      ShowMessage(LChild.Name);
    
  • 修改样式后需调用ApplyStyleLookup才能生效,确保代码中正确执行该方法。

内容的提问来源于stack exchange,提问作者Peter Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:40:59