【发布时间】:2016-04-27 15:32:17
【问题描述】:
我有一段代码将 TFmxObject 转换为 TForm 并访问它的工作正常的高度和宽度属性。 AControl 是一个标准的 TControl,Parent 属性是一个 TfmxObject。编辑:我首先使用 IS 关键字检查父级实际上是 TForm。
LPar:=TControl.Create(AControl);
LPar.Height:=(AControl.Parent As TForm).Height;
LPar.Width:=(AControl.Parent As TForm).Width;
在 Windows 上,此代码返回我期望的 Height 和 Width 值并将其分配给 LPar.Height 和 LPar.Width(也是标准 TControl),但只要我将目标平台更改为 Android 并进行调试在设备上使用usb调试,赋值不是实际值,而是6.2645644...+036(Height和Width都有相同的无效值)。
我不知道问题是否在于将 TFmxObject 转换为 TForm 或.. 真正从哪里开始进一步排除故障。我尝试将 AControl.Parent 分配给本地 TFmxObject,然后对局部变量执行强制转换(结果相同),我也尝试过使用这种语法进行强制转换
TForm(AControl.Parent)
没有运气。任何帮助将不胜感激。
【问题讨论】:
-
你有多确定父母真的是一个TForm?如果你用“is”进行测试,会发生什么?
-
对不起,我忽略了,我首先检查父级是否“是”一个 Tform,否则,如果不是,我执行其他正常工作的逻辑
-
@DavidM:如果
Parent不是真正的TForm,as运算符会引发异常(除非在 Android 上被破坏)。 -
是的,虽然硬演员不会,但我还是想检查一下。很明显,访问表单属性的东西不起作用;第 1 步是,它是一种形式吗?是 FMX 表格还是 VCL 表格? (如果使用子句中的单位有误怎么办?)等等。找出类和强制转换行为似乎是很好的第一步。
-
1.是的,它是一个表单(TForm 的后代,它实际上是一个自定义表单,但在 Windows 中访问该属性就可以了) 2. 它是 FMX,并且必须是因为我使用的是 android 3. 错误的单位应该不是问题,因为我没有任何有条件定义的单位(没有基于平台的交换)希望这能解决一些问题
标签: android delphi firemonkey delphi-10-seattle