Tips.41 C++Builder/Windowsプログラミング
リストビューをカラムでソートする

ListViewのvsReportスタイルで、カラムバー(?)をクリックしてソートする方法を示します。
#速度を追求すればもっと違う書き方もあるでしょう。

#define COL_COUNT 5
void __fastcall TForm1::ListViewColumnClick(TObject *Sender,
      TListColumn *Column)
{
    static int houkou[] = { 0, 0, 0, 0, 0 }; //カラムの数だけ用意する。
    ListView->CustomSort(NULL, Column->Index + houkou[Column->Index]* COL_COUNT;
}

void __fastcall TForm1::ListViewCompare(TObject *Sender, TListItem *Item1,
      TListItem *Item2, int Data, int &Compare)
{
    int muki = 1;
    if ( Data >= COL_COUNT )
    {
         muki = -1; //降順なら結果を反転させる。
         Data -= COL_COUNT;
    }
    //もし、アイコンの種類によって別々にソートするなら
    //たとえばディレクトリとファイル等。
   //ImageIndex = 0 ... ディレクトリ
  //ImageIndex = 1 ... ファイル
  if ( Item1->ImageIndex != Item2->ImageIndex )
    {
        return Item1->ImageIndex - Item2->ImageIndex ;
    }
    //
    // 同じ種類同士なら
  AnsiString Left  = (Data == 0)? Item1->Caption:Item1->SubItems->Strings[Data-1];
  AnsiString Right = (Data == 0)? Item2->Caption:Item2->SubItems->Strings[Data-1];
    return muki * Left.AnsiStringIC( Right );
}
戻る [参照