2013-10-18 124 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