在ListView的ColumnClick事件里给columntosort赋值(被单击列的索引号),调用AlphaSort:
procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
isascsort:=not isascsort;
columntosort:=column.Index;
(sender as tcustomlistview).AlphaSort;
end;
然后在ListView的Compare事件里写排序代码:
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
xx:integer;
begin
if columntosort=0 then//按标题列排序;
if isascsort then
compare:=comparetext(item1.Caption,item2.Caption)
else
compare:=comparetext(item2.Caption,item1.Caption)
else//按SubItems排序
begin
xx:=columntosort-1;
if isascsort then
compare:=comparetext(item1.SubItems[xx],item2.SubItems[xx])
else
compare:=comparetext(item2.SubItems[xx],item1.SubItems[xx]);
end;
end;
function SortByString(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall;
begin
if ColumnIndex = 0 then
Result := CompareText(Item1.Caption,Item2.Caption);
else
if Item1.SubItems[ColumnIndex-1] <= Item2.SubItems[ColumnIndex-1]
then Result := -1
else Result := 1;
end;
使用
procedure TSySortListView.ColumnClick(Sender: TObject; Column: TListColumn);
begin
CustomSort(@SortByString,Column.Index);
end;
procedure TFra_Change.LvSourceColumnClick(Sender: TObject;
Column: TListColumn);
begin
ColumntoSort:=column.Index;
(Sender as TCustomListView).AlphaSort;
end;
procedure TFra_Change.LvSourceCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
ix:integer;
begin
if ColumntoSort =0 then
Compare:=CompareText(Item1.Caption,Item2.Caption)
else
begin
ix:=ColumntoSort-1;
Compare:=CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end;