为什么赢得的控件跨越Android FireMonkey应用中的多个列或行?

时间:2018-02-13 01:14:29

标签: android delphi firemonkey delphi-10.1-berlin

我有一个带有GridPanelLayout的FireMonkey应用程序,与客户端对齐。它有6列16行。控件包括字形,编辑和按钮。 TEdits跨越多列,TButtons跨越多列和多行。目前控件都与客户端保持一致。

当我在Windows上编译和运行时,所有内容都会按预期运行。但是,在Android设备上(我试过两个,Android 6.0.1和Amazon FireOS),没有一个控件跨越多个列或行。他们每个人只有一个大单元。 TEdits不是跨越6个col,而是跨越1个col; TButtons不是跨越2列和2行,而是跨越1列和1行。

为什么控件跨越Android上的多个列或行?

1 个答案:

答案 0 :(得分:2)

当框架/表单被子类化或框架放置在另一个框架/表单上时,VCL和FireMonkey都无法正确存储ControlCollection / TGridPanel的{​​{1}}。

此错误适用于VCL和FMX。早在2011年就向旧质量控制报告过,但从未修复过(例如:#92298#123225)。

示例:在TGridPanelLayout上放一个TGridPanelLayout TButton

TFrame

当您稍后对该框架进行子类化时,IDE倾向于为从基类继承的组件存储许多冗余属性。通常在第一次按F9后,object GridPanelLayout1: TGridPanelLayout (...) ControlCollection = < item Column = 0 ColumnSpan = 2 Control = Button1 Row = 0 RowSpan = 2 end> object Button1: TButton Align = Client Size.Width = 421.000000000000000000 Size.Height = 257.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Text = 'Button1' end end ColumnSpan属性会被无理由删除。在子类上,它看起来像这样:

RowSpan

请注意Size属性的更改方式。此外,重新定义了inherited GridPanelLayout1: TGridPanelLayout (...) ControlCollection = < item Column = 0 Control = Button1 Row = 0 end> inherited Button1: TButton Size.Width = 210.500000000000000000 Size.Height = 128.500000000000000000 end end 项,但ControlCollectionColumnSpan属性完全丢失。这就是原因。

此错误适用于您,因为在FMX中,特定平台的专用视图是作为 master view 的子类实现的。

版本控制系统有助于检测冗余属性何时潜入DFM文件。在上面的示例中,当您的子类不更改它时,完全删除RowSpan块是合法的。此外,我建议您在没有打开表单设计器窗口的情况下构建项目,因为它通常会破坏您的DFM文件并在每次机会时重新添加冗余属性。