Delphi Xe2。列表视图(Lv1)与大列表项。 Lv1有标准的比较程序“TForm1.lv1Compare”。排序由标准程序lv1.AlphaSort开始;所有工作和正常排序。一个问题:如果需要,如何立即停止开始分类?
示例:
procedure tform1.button1.onclick(..);
begin
lv1.AlphaSort; // start sorting
end;
procedure tform1.button2.onclick(..);
begin
//lv1.StopSort; // stop sorting ???
end;
或者可以在程序OnCompare中有任何停止命令?
答案 0 :(得分:4)
在TListView.AlphaSort
内部正在调用ListView_SortItems
宏,但我看不到有关如何在引用中停止排序过程的任何提及(即使通过回调函数),所以我'我担心这是不可能的(至少是常规方式)。
就像Sertac在他的评论中所建议的那样,一个可能的解决方法可能是在OnCompare事件中引发静默异常:
var
YouWantToAbortSort: Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
YouWantToAbortSort := False;
ListView1.AlphaSort;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
YouWantToAbortSort := True;
end;
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
if YouWantToAbortSort then
Abort;
// some sorting function here ...
Application.ProcessMessages;
end;
答案 1 :(得分:2)
使用VirtualTreeView代替TListView,并在另一个线程中对数据进行排序。那么你就有能力随时停止它。