netlib(河外孤星)的回答对了一半,应该如下 在单元文件的头部Private 中声明: ColumnToSort:Integer; 在对以下两个事件编写如下代码 procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin ColumnToSort := Column.Index; (Sender as TCustomListView).AlphaSort; end;procedure TForm1.ListView1Compare(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; end;
我再补充楼上的。在Private中声明另一个变量: FSortFlag: Boolean; //用以标识当前排序规则是升序还是降序。 事件代码这样写: procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin ColumnToSort := Column.Index; Fsortflag := not Fsortflag; (Sender as TCustomListView).AlphaSort; end;procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var ix: Integer; begin if (FColumnToSort < 0) or (FColumnToSort > (Sender as TListView).Columns.Count) then exit; if Fsortflag then if FColumnToSort = 0 then Compare := CompareText(Item1.Caption,Item2.Caption) else begin ix := FColumnToSort - 1; Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]); end else if FColumnToSort = 0 then Compare := CompareText(Item2.Caption,Item1.Caption) else begin ix := FColumnToSort - 1; Compare := CompareText(Item2.SubItems[ix],Item1.SubItems[ix]); end; end;
ColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
end;
在单元文件的头部Private 中声明:
ColumnToSort:Integer;
在对以下两个事件编写如下代码
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
ColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
end;procedure TForm1.ListView1Compare(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;
end;
FSortFlag: Boolean; //用以标识当前排序规则是升序还是降序。
事件代码这样写:
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
ColumnToSort := Column.Index;
Fsortflag := not Fsortflag;
(Sender as TCustomListView).AlphaSort;
end;procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
var
ix: Integer;
begin
if (FColumnToSort < 0) or (FColumnToSort > (Sender as TListView).Columns.Count) then exit;
if Fsortflag then
if FColumnToSort = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else begin
ix := FColumnToSort - 1;
Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end
else
if FColumnToSort = 0 then
Compare := CompareText(Item2.Caption,Item1.Caption)
else begin
ix := FColumnToSort - 1;
Compare := CompareText(Item2.SubItems[ix],Item1.SubItems[ix]);
end;
end;