-1

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

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

我正在使用 Delphi xe5 开发 iOS 应用程序。我确实确保检查 TListbox 的“排序”属性是否为 := False;

更新(对杰里道奇的回应):

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;

没有发布操作/事件与项目相关联。

4

2 回答 2

2

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

然后我删除了充当表单控件的父 TPanel(用于打开侧菜单时的滑动效果),然后滞后消失了。我将做进一步的测试,看看我是否可以将 TPanel 与 TLayout 交换,或者只是相应地调整我的程序和侧面菜单。

更新:TPanel 是导致滚动时滞后的原因。将组件交换为 TLayout 并且它一如既往地顺利运行!

于 2013-10-21T17:48:34.727 回答
1

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

于 2013-10-18T21:05:11.107 回答