ShellListView似乎只能默认的按名称排序,有什么办法能让它按文件大小之类的条件排序?

解决方案 »

  1.   

    1、既然“资源管理器”可以,那理论上应该可以
    2、最“偷懒”的方法直接用现在的组件,如RzShellList
    3、不想用第三方组件,那再研究一下TShellListView类,AlphaSort方法
      

  2.   

    这个还是比较麻烦的。
    这个是ShellListView排序函数(在ShellCtrls.pas里):
    function ListSortFunc(Item1, Item2: Pointer): Integer;
    const
      R: array[Boolean] of Byte = (0, 1);
    begin
      Result := 0;
      if (Item1 = nil) or (Item2 = nil) then Exit;  Result := R[TShellFolder(Item2).IsFolder] - R[TShellFolder(Item1).IsFolder];
      if (Result = 0) and (TShellFolder(Item1).ParentShellFolder <> nil) then
        Result := Smallint(
                      TShellFolder(Item1).ParentShellFolder.CompareIDs(
                      0,
                      TShellFolder(Item1).RelativeID,
                      TShellFolder(Item2).RelativeID)
                  );
    end;修改Smallint()函数里的第二个参数,就可以按照相应的栏排序了。
    可以在TCustomShellListView类里添加两个变量,把相应的排序栏和正序,倒序信息做一个接口引出来,这两个变量改变了,就refresh。把第二个参数改成你添加的变量名。倒序应该把TShellFolder(Item1).RelativeID和TShellFolder(Item2).RelativeID连个变量换下位置。
    修改后重新编译安装控件。
      

  3.   

    、最“偷懒”的方法直接用现在的组件,如RzShellList 
    --------------------------------------
    RzShellList哪里有啊,Baidu了一下,找不到……
      

  4.   


    这里下载:
    http://www.ccrun.com/view.asp?id=186程序名称:Raize Components v5.3 (完整源码) 
    文件大小:38.5MB 
    更新时间:2010-02-19 00:50:56 
    开发工具:Delphi7,9~12,14 / C++Builder10~12,14 
     开发者:raize 
    官方网站:http://www.raize.com/ 
    详细介绍:
    Raize Components 包含了 90 个 Delphi 和 C++ Builder 的控件组,它的一些特点如:制定窗体框架、高级的编辑控件等都使开发者很容易的设计出灵活的、自己喜欢的样式的应用程序。本版本支持以下 IDE:
    Delphi 7,2005
    BDS 2006 (Delphi 2006, C++Builder 2006)
    RAD Studio 2007 (Delphi 2007, C++Builder 2007)
    RAD Studio 2009 (Delphi 2009, C++Builder 2009)
    RAD Studio 2010 (Delphi 2010, C++Builder 2010)