Delphi – 使用GetPropValue()获取属性值
我正在使用Delphi的GetPropValue()函数来获取某些TControl类型对象的某些属性的值.当我获得诸如Value,Opacity等简单属性值时,一切正常,但是因为我使用firemonkey有一些扩展属性,例如RotationCenter,它有RotationCenter.X和RotationCenter.Y,甚至属性TextSettings中的文本,在这些带有子类型的属性中,我无法获取值.
在这个例子中,我正确地得到了值: If IsPublishedProp (Component_cc,'Value') then EditValue.Text: = GetPropValue (Component_cc,'Value',true); Component_cc:TControl;并且是动态创建的,它也可以是任何类型的Firemonkey组件(到目前为止一切正常,一切正常). 当我需要使用下面的表格时,它不起作用. If IsPublishedProp (Component_cc,'RotationCenter.X') then EditRotationCenterX.Text: = GetPropValue (CC_component,'RotationCenter.X',true); 有没有人知道通过这个功能扩展这些属性的方法? 解决方法
首先,CC_component的RotationCenter属性实际上是TPosition类的一个实例,它从TPersistent下移.
其次,调用IsPublishedProp时不能使用点分表示法. 您可以使用GetObjectProp首先检索内部TPosition实例,然后从那里访问X属性: (假设一个简单的FMX应用程序,其中一个表单包含一个名为Button1的TButton和一个名为EditRotationCenterX的TEdit.) procedure TForm1.Button1Click(Sender: TObject); var CC_component : TComponent; CC_component_RotationCenter : TPosition; begin CC_component := Button1; if IsPublishedProp(CC_component,'RotationCenter') then begin CC_component_RotationCenter := TPosition(GetObjectProp(CC_component,'RotationCenter')); EditRotationCenterX.Text := CC_component_RotationCenter.X.ToString; end end; 更新,对于Set类型的属性: 对于Set type属性,您需要使用GetOrdProp检索其序数值.这将是表示当前值中包含哪些元素的位数组.然后,您只需测试是否设置了适当的位.这是我更喜欢的方法. 或者,您可以使用GetSetProp,它将返回Set的当前值中元素的文本表示.例如,如果Set的值为[TCorner.BottonLeft,TCorner.TopRight],您将返回字符串值“TopRight,BottonLeft”.然后,检查目标元素的名称是否出现在返回的字符串中的任何位置.如果Delphi RTL或FMX库将来发生变化,则此方法很容易失败. (这个例子将一个名为Rectangle1的TRectangle形状和一个名为cbCornerBottonRight的TCheckBox添加到上面的简单FMX App (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |