2013-10-18 119 views
-1

我有一个TListBox包含大约50个TListboxItems aka项目。每个项目包含3个用作标签的TText,1个分辨率为48x48的TImage指示“状态”,以及一个用于选择项目的复选框。在设备上时,滚动时会有很大的滞后时间。它往往是跳跃式的,零星的,不一致的。滚动TListBox时滞后

这是因为我有太多的物品?还是因为它们包含TTexts,Timage等? 或者我可以做些什么来平滑TListbox的滚动过程。

我正在使用Delphi xe5开发iOS应用程序。我确实检查了TListbox的'sorted'属性是:= False;

UPDATE(响应杰里道奇):

while XMLNode <> nil do begin 
      Main_Form.LBoxEntries.Items.Add(''); 
      Item1:=Main_Form.LBoxEntries.ListItems[Main_Form.LBoxEntries.Items.Count-1]; 
      Item1.Height    := 80; 
      Item1.Width    := ClientWidth; 

      if XMLNode.ChildNodes['SCANSTATUS'].Text = '0' then begin 
      Item1.ItemData.Bitmap := Main_Form.Red.Bitmap; 
      Item1.Tag    := 0; 
      end; 
      if XMLNode.ChildNodes['SCANSTATUS'].Text = '1' then begin 
      Item1.ItemData.Bitmap := Main_Form.Orange.Bitmap; 
      Item1.Tag    := 1; 
      end; 
      if XMLNode.ChildNodes['SCANSTATUS'].Text = '2' then begin 
      Item1.ItemData.Bitmap := Main_Form.Green.Bitmap; 
      Item1.Tag    := 2; 
      end; 

      Customer := TText.Create(nil); 
      Customer.Parent   := Item1; 
      Customer.Position.X  := 95; 
      Customer.Position.Y  := 8; 
      Customer.Text   := XMLNode.childNodes['CUSTOMERNAME'].text; 
      Customer.Width   := Item1.Width - 105; 
      Customer.WordWrap  := False; 
      Customer.Color   := TAlphaColors.Blue; 
      Customer.Trimming  := TTextTrimming(1); 
      Customer.Height   := 20; 
      Customer.Font.Size  := 18; 
      Customer.HorzTextAlign := TTextAlign(1); 
      Customer.Anchors := [TanchorKind.akLeft,TanchorKind.akRight]; 
      Customer.WordWrap  := False; 

      Product := TText.Create(nil); 
      Product.Parent  := Item1; 
      Product.Position.X := 105; 
      Product.Position.Y := 30; 
      Product.Text   := 'Product: ' +XMLNode.childNodes['PRODUCT'].text; 
      Product.Width   := Item1.Width - 115; 
      Product.Trimming  := TTextTrimming(1); 
      Product.Height  := 20; 
      Product.Font.Size  := 15; 
      Product.HorzTextAlign := TTextAlign(1); 
      Product.Anchors := [TanchorKind.akLeft,TanchorKind.akRight]; 
      Product.WordWrap  := False; 

      QTY := TText.Create(nil); 
      QTY.Parent  := Item1; 
      QTY.Position.X := 105; 
      QTY.Position.Y := 50; 
      QTY.Text   := 'QTY: ('+XMLNode.childNodes['QTY'].text+')'; 
      QTY.Width   := Item1.Width - 115; 
      QTY.Trimming  := TTextTrimming(1); 
      QTY.Height  := 20; 
      QTY.Font.Size  := 15; 
      QTY.HorzTextAlign := TTextAlign(1); 
      QTY.Anchors := [TanchorKind.akLeft,TanchorKind.akRight]; 
      QTY.WordWrap  := False; 

      Item1.ItemData.Detail := ' |' + XMLNode.childNodes['SID'].Text+'|'+ 
            ' |' + XMLNode.childNodes['CUSTOMERNAME'].Text+'|'+ 
            ' |' + XMLNode.childNodes['PRODUCT'].text+'|'+ 
            ' |' + XMLNode.childNodes['QTY'].Text+'| '; 


      XMLNode := XMLNode.NextSibling; 
     end; 
     Main_Form.LBoxEntries.EndUpdate; 

没有发布操作/事件联系在一起的项目。

+0

几乎不可能在不知道更多细节的情况下得到恰当的答案。你有任何与这个列表框有关的事件吗?如何添加项目?你有没有关于这个你可以分享的任何代码? –

+0

已更新。谢谢你,@JerryDodge – ThisGuy

+0

在我看来,你只是在这个列表中有很多数据。很难说如何防止这种滞后。 –

回答

2

我删除了我使用的所有TLayouts,其中我的Listbox被放置在 - 仍然滞后。

然后,我删除了作为窗体控件(用于打开侧边菜单时的滑动效果)的父TPanel,然后消失。我会做进一步测试,看看我是否可以用TLayout交换TPanel,或者相应地调整我的程序和侧边菜单。

更新:TPanel是滚动时导致lagg的原因。交换了一个TLayout的组件,并且它的工作顺利!

1

我认为标准的建议是,如果它需要滚动,使用TListView,而不是TListbox。我已经在iOS和Android上使用XE5在TListView中完成了100多个项目的简单应用,并且滚动一直非常流畅。

+0

我刚刚实施了从TListbox到TListItem的更改,但无济于事。仍然滞后。 – ThisGuy