如何在TListView列上显示排序箭头?

Jen*_*off 6 delphi listview delphi-xe3

Windows资源管理器有一个箭头,指示列表视图(在报表视图样式中)的哪个列按哪个方向排序(ASC与DESC).

是否可以TListView在Delphi中显示这样的排序指示箭头?

Dav*_*nan 17

这是一些简单的代码,用于将标题列标记为升序排序:

uses
  Winapi.CommCtrl;

var
  Header: HWND;
  Item: THDItem;
begin
  Header := ListView_GetHeader(ListView1.Handle);
  ZeroMemory(@Item, SizeOf(Item));
  Item.Mask := HDI_FORMAT;
  Header_GetItem(Header, 0, Item);
  Item.fmt := Item.fmt and not (HDF_SORTUP or HDF_SORTDOWN);//remove both flags
  Item.fmt := Item.fmt or HDF_SORTUP;//include the sort ascending flag
  Header_SetItem(Header, 0, Item);
end;
Run Code Online (Sandbox Code Playgroud)

为简单起见,我省略了错误检查.如果你想要箭头反方向,我相信你可以找出如何交换逻辑.

关键的MSDN主题是HDITEM结构的主题.