在Delphi FMX中,如何通过代码更改TButton组件的背景颜色?

人工智能 2026-07-11

我被分配了任务,用FMX的 Delphi代码动态为按钮着色,让它们呈现不同的颜色。

我想要一个红色的 TButton 组件。我的第一反应是用 TRectangle 代替 TButton,但老板说不希望把组件改成其他类型,因为我们已经有太多 TButton 组件了,我应该找一个能让它与 TButton 一起工作的方法。

我们从数据库获取颜色,现在我需要把按钮填充成这些颜色。同事建议我尝试这样的做法,他发了这段代码:

begin
  var Obj := Button1.FindStyleResource('background');

  if Obj is TRectangle then
    TRectangle(Obj).Fill.Color := TAlphaColorRec.Red;
end;

不过那根本不起作用。他还给出了一些类似的示例代码,我也尝试了,同样也没用。我还尝试过和AI、以及同事的代码来回比较,但没有一个能用。我的同事以及AI似乎都相信这是可行的,但我就是做不成。

我愿意接受任何建议或方法,只要它保持为 TButton,并且颜色能在运行时通过代码改变。

解决方案

下面是我写的一个例子,用来让按钮呈现红色并带有绿色边框:

Button3.ApplyStyleLookup;
var LBg := Button3.FindStyleResource('background');

if LBg = nil then Exit;
if not (LBg is TFmxObject) then Exit;

var LRect := TRectangle.Create(TFmxObject(LBg));
LRect.Name := Button3.Name + '_background';
LRect.HitTest := False;
LRect.Align := TAlignLayout.Client;
LRect.Fill.Kind := TBrushKind.Solid;
LRect.Fill.Color := TAlphaColorRec.Red;
LRect.Stroke.Kind := TBrushKind.Solid;
LRect.Stroke.Color := TAlphaColorRec.Green;
LRect.Stroke.Thickness := 4;
TFmxObject(LBg).AddObject(LRect);

这段代码将从我的表单上取一个 TButton(在这个例子中是 Button3),并向它的 background 样式资源添加一个 TRectangle,然后通过那个 TRectangle 你就可以做任何你想做的事,例如把 Fill.Color 设置为红色,或把 Stroke.Color(边框)设置为绿色。

记得把 HitTest 设置为 False。如果你不这么做,你将无法再点击按钮。


在这里你可以看到设计时(左)和运行时(右)的按钮:

动态更改 TButton 样式

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章