【问题标题】:Why scrolling a TListView calls for an entire form repaint - Delphi Firemonkey为什么滚动 TListView 需要重新绘制整个表单 - Delphi Firemonkey
【发布时间】:2014-02-04 16:22:51
【问题描述】:

从一个空白的移动应用开始,我添加了一个TlistView、一个TCircle 和一个TMemo。除了默认之外,没有任何控件有任何对齐方式,它们都是主窗体的直接子级。

在 ListView 的 OnPaint 事件中,我放了这个:

Memo1.Lines.Add('ListView paint'), 

对于圆形 OnPaint:

Memo1.Lines.Add('Circle paint');

当我运行应用程序时,结果是滚动列表视图会导致将大量“列表视图绘制”和“圆形绘制”添加到备忘录中,这两个项目总是同时添加。为什么滚动列表视图(或滚动备忘录)会调用整个表单重绘?

调用堆栈中有一行让我觉得整个表单正在重新绘制:

Fmx.Platform.Ios.TFMXView3D.drawRect(0x14659ec0,{origin = {x = 0, y = 0}, size = {width = 768, height = 1024}})

我想知道这是否应该发生。这导致我的列表表现不佳,因为图表不断被重新绘制。

【问题讨论】:

  • 是的,这是个问题。您可以在 EMB 板/QC 报告中搜索其分辨率的任何 ETA。
  • 我在 Embarcadero 论坛上发布了一些内容,但没有收到任何回复。我将提交一份 QC 报告,以便将其记录在某处。

标签: delphi firemonkey delphi-xe5


【解决方案1】:

从 cmets 看来,这似乎是 Firemonkey 的问题,但它已被指定为设计使然。来自QC issue

FireMonkey 中用于移动平台的 GPU 画布始终会重新绘制整个表单,这是设计使然。

作为一种解决方法,可以使用 TRasterEffect,它可以放在窗体上并作为其中一个控件的父级。如果这样做,控件会先渲染到内部图像,然后再绘制这样的图像,从而缓解问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-12
    • 2015-01-25
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多