TListView自定义排序
Delphi中TListView的排序步骤,主要使用到两个事件
FOnColumnClick: TLVColumnClickEvent;
FOnCompare: TLVCompareEvent;
简单点的说,就是定义FOnCompare事件,即下面的lvPCCompare,指定每个列,即column的比较方法,返回compare正负值。
然后实现FOnColumnClick事件,就是点击标题事件,下面的代码,主要的处理都是一个箭头图标的处理,关键在lv.CustomSort(nil, Column.index);的调用。
procedure TfrmFileManager.lvPCColumnClick(Sender: TObject; Column: TListColumn);
var
i: integer;
lv:TListView;
begin
lv:=(sender as TListView);
for i := 0 to lv.Columns.Count - 1 do
begin
if (i = Column.index) then
continue;
lv.Columns[i].Tag := 0;
lv.Columns[i].ImageIndex := -1;
end;if (Column.Tag = 2) or (Column.Tag = 0) then
Column.Tag := 1
else
Column.Tag := 2;
Column.ImageIndex := Column.Tag - 1;lv.CustomSort(nil, Column.index);
end;
procedure TfrmFileManager.lvPCCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
compare1, compare2: integer;
begin
Compare := 0;
case Data of
0: Compare := CompareText(Item1.Caption, Item2.Caption);
1:
begin
compare1 := StrToInt(Item1.SubItems[Data - 1]);
compare2 := StrToInt(Item2.SubItems[Data - 1]);
if compare1 > compare2 then
Compare := 1
else if compare1 < compare2 then
Compare := -1;
end;
2,3: Compare := CompareText(Item1.SubItems[Data - 1], Item2.SubItems[Data - 1]);
end;if Item1.ListView.Column[Data].Tag = 2 then
Compare := -Compare;end;
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。