Delphi 基于tgraphic控件的对象容器

Delphi 基于tgraphic控件的对象容器,delphi,delphi-2010,flicker,tpanel,tscrollbox,Delphi,Delphi 2010,Flicker,Tpanel,Tscrollbox,我使用TScrollBox制作自定义列表,其中包含许多控件(tlabel、Timages、Tshapes) 问题是,当我使用Tpanel作为每个项目的容器时,添加大约100个项目后,列表会变得缓慢且闪烁 我正在寻找一种基于TGraphic Control的TPanel替代方案,以提高性能您还可以将Form.DoubleBuffered:=True设置为防止闪烁而不是在面板容器中使用控件,我使用TPaintBox为每一行使用画布进行绘制,正如建议的那样您可以制作一个TGraphicControl子

我使用TScrollBox制作自定义列表,其中包含许多控件(tlabel、Timages、Tshapes)

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


我正在寻找一种基于TGraphic Control的TPanel替代方案,以提高性能

您还可以将
Form.DoubleBuffered:=True
设置为防止闪烁

而不是在面板容器中使用控件,我使用TPaintBox为每一行使用画布进行绘制,正如建议的那样

您可以制作一个
TGraphicControl
子体,该子体将使用某种虚拟对象(如层)。您将拥有一个虚拟对象定义(对象大小、位置、文本、形状等)列表,并且在任何定义发生更改时,您将通过这些定义渲染到屏幕外位图。其余部分是关于屏蔽屏幕外位图。基于TGraphicControl的任何内容都不能作为其他控件的父控件。@TLama这是个好主意,但我使用带有面板和控件的TScrollbox而不是TListView来处理每个控件上的事件,而使用这种方法是不可能的。也许您可以使用TFrame而不是TScrollbox。我有一些TFrame包含近1000个控件,并且TFrame可以很好地滚动。我使用TGroupBox将TFrame划分为多个部分。为什么需要容器?一把双刃剑。通常会导致其他问题。通常最好一开始就正确绘制。您可以尝试使用DevExpress LayoutControl。在我以前的项目中,它只包含50多个控件。