ShellListViewでソート


とら  2005-07-20 07:14:20  No: 16440  IP: 192.*.*.*

ShellListView で詳細表示(Repot)にしたときに、カラムをクリックして
ソートしたいのですが、どうしたらいいのでしょうか?

編集 削除
ぶる  2005-07-20 15:46:55  No: 16441  IP: 192.*.*.*

他のソート出来るコンポを探す手もあるけど。

編集 削除
長い回答は拒否?  2005-07-20 16:03:50  No: 16442  IP: 192.*.*.*

短い回答なら送信できるけど、長いのは拒否されるみたい。
どのくらいの長さまでならOKなのかな?

テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと
テストてすとテストてすと

編集 削除
頑固ひとスジふたスジ  2005-07-21 10:06:01  No: 16443  IP: 192.*.*.*

>ShellListView で詳細表示(Repot)にしたときに、カラムをクリックして
>ソートしたいのですが、どうしたらいいのでしょうか?

ふたスジ: 「ほんま、ソートでけたらエエな〜」
ひとスジ: 「それは、そ〜と〜ムズカシイかも」
ふたスジ: 「おやじギャグ、さぶいで」
ひとスジ: 「アツイ時には おやじギャグで涼しく...なんちゃって」
ふたスジ: 「もっとアツぅなる(~_~;)A  はよ教えてんか」
ひとスジ: 「ソートするには、TShellListViewのソースもチョット書き換えないと...」
ふたスジ: 「ん〜、ならD6 Personalやとダメなん?」
ひとスジ: 「Demos\ShellControls\にあるから、ダイジョウV! 」
ふたスジ: 「ホンマ、スベっとるで」

const
  MAXCOLUMN = 4;
var
  FSortColumnIdx: Integer;
  FSortOrder: array[0..MAXCOLUMN] of Boolean;
     
function CustomShellSortProc(Item1, Item2: Pointer): Integer;
begin
  result := SmallInt(TShellFolder(Item1).ParentShellFolder.CompareIDs(
    FSortColumnIdx, TShellFolder(Item1).RelativeID, TShellFolder(Item2).RelativeID));
  if FSortOrder[FSortColumnIdx] then begin
    result := -result;
  end;
end;

procedure TForm1.ShellListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
  FSortColumnIdx := Column.Index;
  ShellListView1.FolderList.Sort(CustomShellSortProc);
  ShellListView1.Invalidate;
  FSortOrder[FSortColumnIdx] := not FSortOrder[FSortColumnIdx];
end;

*ShellCtrls.pas 書き換え
{ TShellListView }
  TShellListView = class(TCustomShellListView)
  published
    property FolderList: TList read FFolders;  // 追加
    ...........
  end;

編集 削除