【问题标题】:Removing objects, disable horizontal scrolling on TGrid (Delphi XE5 + iPad)删除对象,禁用 TGrid 上的水平滚动(Delphi XE5 + iPad)
【发布时间】:2014-07-08 08:07:03
【问题描述】:

我目前正在开发一个 iPad 应用程序,该应用程序使用具有动态创建内容的 TGrid。

但这给我带来了一些问题: 出于某种原因,我无法释放和释放添加到 TGrid 的对象(再次删除它们)。在 Windows 中,FreeAndNil 解决了这个问题,但显然 FreeAndNil 在 Mac Simulator 或 iPad 设备上什么也没做。我能想出的唯一解决方案是将 RowCount 设置为适当的数量,但控件仍然存在并且被覆盖。

还有可能以某种方式禁用 TGrid 中的水平滚动,或者我需要为此实现自定义控件吗?

【问题讨论】:

  • DisposeOf 在移动平台上释放对象。
  • 干杯,似乎工作:-)

标签: ipad delphi firemonkey tgrid


【解决方案1】:

在使用 ARC 的移动平台上,Free/FreeAndNil 不会立即释放对象。 见The Free and DisposeOf methods under ARC。

改为使用DisposeOf(),它会立即调用析构函数。

DisposeOf 强制执行对象中的析构函数代码。 新的 Delphi 移动编译器引入了一种通过调用 DisposeOf 实现的新 dispose 模式,即使存在对对象的未决引用的变量,它也会执行析构函数代码。调用 DisposeOf 方法后,对象处于一种特殊状态,即 Disposed 状态。这意味着如果再次调用 DisposeOf 或引用计数达到零(释放内存的时刻),则不会再次调用析构函数。

【讨论】:

    【解决方案2】:

    还有可能以某种方式禁用 TGrid 中的水平滚动...

    当然,只需调整列的大小以适应网格的大小。或者,如果您不能这样做,请使用 TColumn.Visible 属性。如果可见列的宽度之和小于网格的宽度,您将没有滚动条。但是如果没有滚动条,您必须处理左右穿过网格的问题。

    示例:有 5 列的网格,只有前 2 列可见,左右按钮。当按下右键时,最左边可见的第 0 列不可见,第 2 列开始可见/现在第 1 列和第 2 列可见/。

    【讨论】:

    • 出于某种原因,我无法让它工作。我尝试将唯一的列设置为 TGrid 的相同长度,没有设置其他选项,即使水平滚动不可见,我仍然可以“移动”列位置(在视觉上它看起来好像列和行不完全附加,但向左或向右移动)。也许问题与滚动无关?
    • 你没有提到垂直滚动条,如果你有垂直滚动条,你必须减少你的列。看这里:stackoverflow.com/questions/1716870/…
    猜你喜欢
    • 2011-07-10
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多