フリーソフト

« 2006年10月 | トップページ | 2007年4月 »

[BCB] ListViewのHeader(Column)に画像を表示する

ListViewのヘッダーに画像を表示する方法です。文字列の左側に表示する場合はプロパティを設定するだけで簡単にできますが、文字列の右側に画像を表示する場合は以下の関数で実現できます。表示したい画像はあらかじめImageListにいれておきます。

void __fastcall TForm1::ShowImageToLvColumn(TListView *ListView,int ACol,int ImageIndex)
{
  //ヘッダコントロールのハンドル取得
  HWND ColumnHandle=ListView_GetHeader(ListView->Handle);
  if (ColumnHandle==NULL) return;
  //イメージリストを割り当て
  if (!Header_SetImageList(ColumnHandle,ImageList1->Handle)) return;

  //設定を取得
  HD_ITEM hi;
  hi.mask=HDI_FORMAT;
  if (!Header_GetItem(ColumnHandle,ACol,&hi)) return;

  //イメージを設定
  hi.mask   = HDI_IMAGE|HDI_FORMAT;
  if (ImageIndex>=0) {
    hi.fmt   |= HDF_IMAGE|HDF_BITMAP_ON_RIGHT;  // 取得しておいたフォーマットに HDF_IMAGE 追加
    hi.iImage = ImageIndex; // ImageListのID
  } else {
    hi.fmt   &= ~(HDF_IMAGE|HDF_BITMAP_ON_RIGHT);
    hi.iImage = 0; //-1をいれるとエラーになる
  }
  Header_SetItem(ColumnHandle,ACol,&hi);
}

« 2006年10月 | トップページ | 2007年4月 »