【问题标题】:Object container based on TGraphicControl基于 TGraphicControl 的对象容器
【发布时间】:2015-03-14 13:35:31
【问题描述】:

我正在使用 TScrollBox 使自定义列表包含许多控件(Tlabels、Timages、Tshapes)

问题是当我使用 TPanels 作为每个项目的容器时,添加大约 100 个项目后列表变得缓慢和闪烁。

我正在寻找基于 TGraphicControl 的 TPanel 的替代品以提高性能

【问题讨论】:

  • 您可以创建一个TGraphicControl 后代,它将使用某种虚拟对象(如图层)。您将拥有一个虚拟对象定义列表(对象大小、位置、文本、形状......),并且只要任何定义发生更改,您就会通过这些定义渲染到屏幕外位图。剩下的就是对屏幕外位图进行 blitting。
  • 没有任何基于 TGraphicControl 的控件可以作为其他控件的父级。
  • @TLama 这是个好主意,但我使用带有面板和控件的 TScrollbox 而不是 TListView,以便能够处理使用此方法无法实现的每个控件上的事件
  • 也许您可以使用 TFrame 而不是 TScrollBox。我有一些包含接近 1000 个控件的 TFrame,并且 TFrame 滚动良好。我使用 TGroupBoxes 将 TFrame 分成几个部分。
  • 为什么需要容器?

标签: delphi delphi-2010 flicker tpanel tscrollbox


【解决方案1】:

你也可以转Form.DoubleBuffered := True防止闪烁

【讨论】:

  • 双刃剑。往往会导致其他问题。通常最好一开始就画出来。
  • 你可以试试 DevExpress LayoutControl。在我的旧项目中,它只包含 50 多个控件。
【解决方案2】:

我没有在面板容器中使用控件,而是按照建议使用 TPaintBox 为每一行使用画布进行绘制

【讨论】:

    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多