【问题标题】:Accessing property of casted object returning unexpected results on Android访问在 Android 上返回意外结果的转换对象的属性
【发布时间】: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 不是真正的TFormas 运算符会引发异常(除非在 Android 上被破坏)。
  • 是的,虽然硬演员不会,但我还是想检查一下。很明显,访问表单属性的东西不起作用;第 1 步是,它是一种形式吗?是 FMX 表格还是 VCL 表格? (如果使用子句中的单位有误怎么办?)等等。找出类和强制转换行为似乎是很好的第一步。
  • 1.是的,它是一个表单(TForm 的后代,它实际上是一个自定义表单,但在 Windows 中访问该属性就可以了) 2. 它是 FMX,并且必须是因为我使用的是 android 3. 错误的单位应该不是问题,因为我没有任何有条件定义的单位(没有基于平台的交换)希望这能解决一些问题

标签: android delphi firemonkey delphi-10-seattle


【解决方案1】:

通过安装 Berlin 10.1 并从头开始设置环境(安装软件包、更新库路径等)来修复它 我不知道是使用较新版本的 Delphi 解决了这个问题,还是我重新安装了我的软件包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2017-07-07
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多