在 Form Create 事件中加入
procedure TForm1.FormCreate(Sender: TObject);
begin
with ListView1 do
begin
ViewStyle := vsReport;
Columns.Add.Caption := 'A';
Columns.Add.Caption := 'B';
with Items.Add do
begin
Caption := '3';
SubItems.Add('3');
end;
with Items.Add do
begin
Caption := '2';
SubItems.Add('1');
end;
with Items.Add do
begin
Caption := '1';
SubItems.Add('2');
end;
end;
end;
在 TForm1 的 private 宣告中加入
private
SortColumn: TListColumn; // 排序欄位
在 TListView ColumnClick 事件中加入
procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
SortColumn := Column;
(Sender as TCustomListView).AlphaSort; // 排序
SortColumn.Tag := not SortColumn.Tag; // tag 紀錄正反排
end;
在 TListView Compare 事件中加入
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
ix: Integer;
begin
if SortColumn.Index = 0 then
Compare := CompareText(Item1.Caption, Item2.Caption)
else begin
ix := SortColumn.Index - 1;
Compare := CompareText(Item1.SubItems[ix], Item2.SubItems[ix]);
end;
if Boolean(SortColumn.Tag) then begin
Compare := -Compare; // 反排
end;
end;
執行程式後,就可用滑鼠按 ListView 的 Column Header 來做正反排
沒有留言:
張貼留言