如何修改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:
- 在窗体上添加
TStyleBook控件。 - 右键点击TStyleBook,选择Load Style...,加载FireMonkey默认样式文件(通常路径为
C:\Program Files (x86)\Embarcadero\Studio\XX.X\Redist\styles\Fmx,例如Windows11.Style)。 - 右键点击TStyleBook,选择Edit Style...,打开样式编辑器。
- 在编辑器中找到
TSelectionPoint的样式,展开后定位到对应非激活状态的Circle控件,修改其Fill.Color属性。 - 保存修改后的样式,将窗体的
StyleBook属性设置为该TStyleBook控件,所有TSelectionPoint都会应用修改后的样式。
注意事项
- 部分Delphi版本中TSelectionPoint的样式资源名称可能不同,可通过以下代码遍历确认:
for var LChild in LSelectionPoint.Children do ShowMessage(LChild.Name); - 修改样式后需调用
ApplyStyleLookup才能生效,确保代码中正确执行该方法。
内容的提问来源于stack exchange,提问作者Peter Jones
相关产品推荐
相关产品推荐

