【问题标题】:EReadError with TColor published properties in FMXEReadError 与 TColor 在 FMX 中发布的属性
【发布时间】:2019-09-16 01:30:46
【问题描述】:

在 FMX 组件中,我有这样的定义:

published
  property BackgroundColor: TColor read fBackgroundColor write fBackgroundColor;
end;

如果 BackgroundColor 设置为 const,例如 clRed,则会收到 EReadError“读取 BackgroundColor 时出错:属性值无效”。

它适用于正常值,例如 $00FF8000。那么为什么对象检查器让你选择一个常量???

解决方法是将属性声明为 TAlphaColor,但这意味着在我的组合 VCL/FMX 单元中另一个条件定义。

还有其他方法可以将属性保留为 TColor 吗?

德尔福 10.3.2

【问题讨论】:

  • BackgroundColor 属于哪个类?这个 BackgroundColor 的类型是什么?我相信类型是 TAlphaColor 任何你不能将 TColor 分配给 TAlphaColor。
  • 它源自没有 BackgroundColor 属性的 TControl。它是一个字段 fBackgroundColor: TColor;

标签: firemonkey


【解决方案1】:

我假设您将TColorsTColor 混合使用。两者都在System.UITypes中定义:

TColor = -$7FFFFFFF-1..$7FFFFFFF;

TColors = TColorRec;
TColorRec = record ...

来自 Vcl.Graphics:

clRed = TColors.Red;

也许下面的函数可以帮助你转换类型

function AlphaColorToColor(const Color: TAlphaColor): TColor;

很遗憾,System.UITypes 中没有功能 ColorToAlphaColor

Uwe Raabe 为此在 DelphiPraxis 论坛上发布了自己的解决方案:

function ColorToAlphaColor(Value: TColor): TAlphaColor;
var
  CRec: TColorRec;
  ARec: TAlphaColorRec;
begin
  CRec.Color := Value;
  ARec.A := CRec.A;
  ARec.B := CRec.B;
  ARec.G := CRec.G;
  ARec.R := CRec.R;
  Result := ARec.Color;
end;

参见此处Convert TColor in TAlphaColor

【讨论】:

  • 对于 TColor 属性,对象检查器允许您选择 VCL 颜色,如 clRed 或 clBtnFace。如果你这样做,它就可以处理流媒体。
  • 好的,但这一定是 Delphi IDE 中的问题。能否在质量中心为其添加错误报告:quality.embarcadero.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2011-06-03
相关资源
最近更新 更多