【发布时间】:2017-08-31 02:30:22
【问题描述】:
我在使用Delphi的GetObjectProp函数获取表单组件的属性,我获取了几个组件的所有属性,但是获取不到TextSettings.Font.Style(Bold, Italic, ...)的属性例如像 TLabel 这样的组件。我需要知道组件文本是粗体还是斜体。我正在尝试获取这些属性的过程如下:
procedure Tfrm1.aoClicarComponente(Sender: TObject);
var
TextSettings: TTextSettings;
Fonte: TFont;
Estilo: TFontStyle;
Componente_cc: TControl;
begin
Componente_cc := TControl(Label1);
if IsPublishedProp(Componente_cc, 'TextSettings') then
begin
TextSettings := GetObjectProp(Componente_cc, 'TextSettings') as TTextSettings;
if Assigned(TextSettings) then
Fonte := GetObjectProp(TextSettings, 'Font') as TFont;
if Assigned(Fonte) then
Estilo := GetObjectProp(Fonte, 'Style') as TFontStyle; // <-- error in this line
if Assigned(Estilo) then
Edit1.text := GetPropValue(Estilo, 'fsBold', true);
end
end;
我上面标记的那一行显示的错误是。
[dcc64 Error] uPrincipal.pas(1350): E2015 运算符不适用于此操作数类型
我做错了什么?
【问题讨论】:
-
在示例中我简化了代码以便更好地理解,但在实际应用程序中它更复杂,组件在运行时创建并且可以是任何类,所以我使用 rtti。我将其更改为 TFontStyles segestao,但错误仍然存在。
-
Style属于TFontStyles类型,它不是对象类型,而是类型属性的集合。而fsBold不是属性,而是该集合的可能成员。 -
但是如果不是对象类型,如何获取属性呢?
-
使用
GetOrdProp。 Set 只是一个序数值,您可以通过in运算符查询成员。或者如果要将集合成员打印为字符串,可以使用GetSetProp。
标签: delphi firemonkey