gpt4 book ai didi

delphi - 为什么滚动 TListView 需要整个表单重新绘制 - Delphi Firemonkey

转载 作者:行者123 更新时间:2023-12-03 15:58:11 32 4
gpt4 key购买 nike

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

在ListView的OnPaint事件中,我这样写:

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

对于圆OnPaint:

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

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

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

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

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

最佳答案

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

GPU Canvas in FireMonkey that is used on mobile platforms always repaints the entire form, which is by design.

As a workaround, there is TRasterEffect, which can be dropped on the form and parented to one of the controls. If done so, the control will be rendered to internal image first and then such image will be drawn, alleviating the problem.

关于delphi - 为什么滚动 TListView 需要整个表单重新绘制 - Delphi Firemonkey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557807/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com