我猜想可能是这样的,既然是虚拟的list,也就是列表里真正只有少数几个纪录,当调用oncompare进行排序的时候是没有意义的,因为只能排listview中的少数几条,而还有大量的其他数据在这个控件之外不能进行排序,当你移动滚动条在此装入其他数据的时候可能会产生混乱,而windows的资源管理器,我猜想他肯定在listview控件的外面进行的排序,所以不产生oncompare事件是有道理的。 如果你真得想对listview里的少数纪录排序可以调用CustomSort方法。 例如: ListView_Item.CustomSort(@CustomSortProc, Column.Index);function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer; stdcall; begin if ParamSort = 0 then Result := lstrcmp(PChar(TListItem(Item1).Caption), PChar(TListItem(Item2).Caption)) else Result := lstrcmp(PChar(TListItem(Item1).SubItems[ParamSort-1]), PChar(TListItem(Item2).SubItems[ParamSort-1])); end
例如:
ListView_Item.CustomSort(@CustomSortProc, Column.Index);function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer; stdcall;
begin
if ParamSort = 0 then
Result := lstrcmp(PChar(TListItem(Item1).Caption), PChar(TListItem(Item2).Caption))
else
Result := lstrcmp(PChar(TListItem(Item1).SubItems[ParamSort-1]), PChar(TListItem(Item2).SubItems[ParamSort-1]));
end