【问题标题】:In Delphi XE2 FireMonkey - How do i change the color of a button after pressing it在Delphi XE2 FireMonkey中-按下按钮后如何更改按钮的颜色
【发布时间】:2011-11-08 16:13:54
【问题描述】:

我只是想在按下按钮后更改它的颜色。

我必须使用“样式”来执行此操作还是....?

【问题讨论】:

  • 澄清:您是否希望按钮在按下时更改颜色,然后恢复,或者在按下后永久更改颜色(如“向下”的速度按钮) - 如果是这样,当它会重置为原始颜色吗?

标签: delphi firemonkey


【解决方案1】:

您可以更改 button.StyleLookup 属性以更改样式(颜色)。

您需要向样式簿添加新样式。

  1. 从按钮的鼠标右键菜单中选择“编辑自定义样式...”。
  2. 从背景下的 TRectangle 项中更改 Fill.Color 属性:TRectangle
  3. 应用并关闭样书
  4. 清除 button.stylelookup
  5. 将 buttonclick 中的 button.stylelookup 更改为新的创建样式,但您没有更改其 Button1Style1 的名称

【讨论】:

  • 在 Delphi XE8 中这不存在 - 按钮样式中没有 TRectangle,只有 TStyleContainerTButtonStyleObjectTGlyphTButtonStyleTextObjectTImage .
  • 在 Delphi 10.3 中我需要添加 TRectangle,因为它默认不存在。
【解决方案2】:

使用样式

创建不同样式并切换到新样式的另一种方法是为按钮创建自定义样式并在运行时更改该样式的颜色。

  1. 右键单击按钮并从主菜单中选择“编辑自定义样式...”。
  2. 在样式编辑器中单击应用并关闭。

您刚刚为按钮创建了自定义样式。所以当你在运行时编辑它时,它只会影响那个按钮。

现在,在您的 OnClick 事件中输入以下内容以在运行时更改颜色:

  var
    r: TRectangle;
  begin
    // Find the background TRectangle style element for the button
    r := (Button1.FindStyleResource('background') as TRectangle);
    if Assigned(r) then
    begin
      r.Fill.Color := claBlue;
    end;
  end;

注意:如果您还没有 FMX.Objects 子句,请将其添加到您的 uses 子句中。这就是 TRectangle 所在的位置。

但是等等……

您会注意到,当鼠标离开或进入按钮时,按钮的颜色会变回默认值。那是因为动画。如果您在自定义样式的样式编辑器中为两个 TColorAnimation 样式元素设置 stylename 属性,您还可以在它们上设置颜色。对于我的示例,我将 TColorAnimations 命名为 coloranimation1 和 coloranimation2。

这是修改后的代码:

var
  r: TRectangle;
  ca: TColorAnimation;
begin
  // Find the background TRectangle style element for the button
  r := (Button1.FindStyleResource('background') as TRectangle);
  if Assigned(r) then
  begin
    r.Fill.Color := claBlue;
  end;
  ca := (Button1.FindStyleResource('coloranimation1') as TColorAnimation);
  if Assigned(ca) then
  begin
    ca.StartValue := claBlue;
  end;
  ca := (Button1.FindStyleResource('coloranimation2') as TColorAnimation);
  if Assigned(ca) then
  begin
    ca.StopValue := claBlue;
  end;

注意:将 FMX.Ani 添加到 TColorAnimation 的 uses 子句中。

【讨论】:

  • 只要鼠标光标在按钮上方,它就可以工作。将光标移开会将颜色更改为原始颜色。但也许我误解了这个问题。
  • @Arjen,你是对的。这适用于大多数样式元素,但焦点动画​​会在鼠标离开后恢复默认颜色。
  • 我已经更新了我的答案,包括更新动画。
  • 不,不要那样做。抱歉,Marcus,但此代码不适用于默认样式。有许多不同的按钮样式。例如:MacBlue,只有 GradientAnimation 或 Ruby、FloatAnimation 和 2 个矩形。两种样式都没有彩色动画。不要在代码中对样式更改进行硬编码,而是使用 Stylebook。
  • @tondog,如果您不需要能够在运行时选择颜色的灵活性,请按照 Arjen 的建议进行操作,这会更容易。我刚刚发布了我的答案,以便您可以看到另一种可能适合您的方法。在我的应用程序中,用户选择颜色。
猜你喜欢
  • 2020-04-20
  • 2019-10-13
  • 1970-01-01
  • 2015-10-01
  • 2019-06-28
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多