编辑:我正在使用 Delphi 12.1(无法添加评论)
我看到了这个链接:
在 Delphi XE2 FireMonkey 中 - 如何在按下按钮后更改按钮的颜色
我将代码设置为:
SpeedButton1.StyleLookup := 'segmentedbuttonmiddle';
var Background: TRectangle;
if SpeedButton1.FindStyleResource('background') <> nil then
begin
Background := SpeedButton1.FindStyleResource('background') as TRectangle;
Background.Fill.Color := TAlphaColorRec.LightBlue;
end;
为什么找不到“背景”?
如何覆盖速度按钮的颜色?
Firemonkey 样式基于位图,并且包含针对不同状态的不同位图。 对于
TSpeedButton
,不同的状态是:
位图实际上是较大位图的一部分。 因此,对于样式化控件,您可以指定包含要使用的图像的位图,并且对于每个状态,您可以指定要使用的位图部分。 在您的情况下,您需要提供一个位图,其中包含表示
PressedLink
状态的浅蓝色区域。
样式控件具有
StyleLookup
属性。 如果未提供,则默认(在本例中)为名为 SpeedButtonStyle
的样式。 您可以选择更改表单上所有 TSpeedButton
的样式,或仅更改选定的样式。
要在设计时更改样式,请右键单击控件并选择 EditCustomStyle
或 EditDefaultStyle
。 如果您选择第一个选项,Delphi 将创建一个名为 SpeedButton1Style1
的样式,and 将 StyleLookup
属性设置为该名称。 如果您希望选定的其他按钮使用相同的样式,只需将它们的 StyleLookup
属性设置为相同的名称即可。
您可以在样式编辑器中更改该名称,但您还需要在按钮的
SourceLookup
属性中更改它。
当您在样式编辑器中时,展开样式以找到
background
子组件,然后使用对象检查器更改适当的属性(SourceLookup
用于位图以及上面列出的不同状态的属性) .
Link
属性指定两个矩形,一个位于另一个内部。 如果我理解正确的话,内部矩形指定背景内部的外观(拉伸以填充背景),内部矩形和外部矩形之间的差异指定背景的边缘(类似拉伸)。
编辑完样式后,只需关闭该编辑器选项卡,它会询问您是否要在关闭之前应用更改(单击“否”将放弃您的更改)。