【发布时间】:2014-03-09 19:42:34
【问题描述】:
我有一个 TListBox,它在加载时可以有一个很长的字符串列表,所以我让操作员通过单击一个按钮来启动排序。有时,排序可能需要将近一分钟,操作员会想知道发生了什么。
有什么方法可以使用 TProgressBar 来显示正在发生的事情吗?如果有,怎么做?
或
我可以在开始时将屏幕变灰(视觉上禁用),然后在排序完成后重新变回白色吗?如果有,怎么做?
谢谢
【问题讨论】:
-
您是否在后台线程中运行排序?列表中有多少项?我敢打赌,您可以将排序速度提高几个数量级。
-
FWIW,排序需要一分钟,列表中包含大约 1000 万个项目。如果你的数量比这个少很多,那么解决问题的方法就是修复排序。
-
@DavidHeffernan 感谢 cmets,大约有 60,000 到 90,000 个长字符串(300 多个字符)要按字母顺序排序。理想情况下 SQL 会更好,但这是我试图为小型企业廉价修改的一些旧软件,所以重写已经结束。我只是使用 Listbox.Sort 方法。速度——我敢说,它是在win98上运行的!哈哈
-
你在使用
TListBox.Items.BeginUpdate/EndUpdate吗?这应该会加快速度。 -
@LURD,这可能会加快速度,但
WM_SETREDRAW消息是在 Windows 98 上出现的TListBoxStrings(至少在 Delphi 2009 中)的SetUpdateState方法的后面:-) ?
标签: delphi sorting listbox delphi-4