我根据delphi的例子(Demos\Virtual Listview)做一个资源管理器类的东东。
(没有用TShellListView,是因为不知道怎么对指定文件过滤(如TXT文件))
在做对items排序时发现:OwnerDate := True;时无法触发OnCompare事件。
也就无法进行排序。当OwnerDate := False;时可以触发OnCompare事件。但是不能
触发OnData等事件,也就无法做到动态添加数据的功能?
不知道各位高手们有什么好的解决方法?

解决方案 »

  1.   

    我猜想可能是这样的,既然是虚拟的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