TListViewで列を指定してソート
|
以下のようにすると簡単にできます。
// ソートに使うColumnを表す。
var ListViewSort:Integer;
// Formのメンバ変数にするのがいいとおもいます。
// 0でソートしない。
// ゼロ以外ならば、Abs(ListViewSort)コラムをキーにする
// 正負で正・逆順ソート
// 汎用的に使える比較ルーチン
procedure TMainForm.ListViewCompare(Sender: TObject; Item1, Item2:
TListItem; Data: Integer; var Compare: Integer);
begin
case ListViewSort of
0: Compare:=0;
1,-1: Compare:=AnsiCompareStr(Item1.Caption,Item2.Caption);
else Compare:=AnsiCompareStr(Item1.SubItems[Abs(ListViewSort)-2],
Item2.SubItems[Abs(ListViewSort)-2]);
end;
if ListViewSort<0 then Compare:=-Compare;
end;
// コラムヘッダがクリックされたらソートしなおす。
procedure TMainForm.ListViewColumnClick(Sender: TObject; Column:
TListColumn);
begin
if Abs(ListViewSort)=Column.Index+1 then begin
ListViewSort:=-ListViewSort;
end else begin
ListViewSort:=Column.Index+1;
end;
ListView.SortType:=stNone;
ListView.SortType:=stData;
end;
|
|