Top / Programming / C++Builder / ファイルの拡張子に関連づけられたアイコン(TIcon)を取得する

ファイルの拡張子に関連づけられたアイコン(TIcon)を取得する

ファイルのパスからHICONを取得する

//ファイルのパス
UnicodeString filename = L"C:\サンプル\テスト.XLS";
SHFILEINFO shFileInfo;
SHGetFileInfo(filename.c_str(), NULL, &shFileInfo, sizeof(SHFILEINFO),
              SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
HICON hIcon = shFileInfo.hIcon;

//何らかの処理
…

//後始末
DestroyIcon(hIcon);

小さいアイコンではなく、大きいアイコンを取得するときは SHGFI_LARGEICON を指定します。

SHGetFileInfo(filename.c_str(), NULL, &shFileInfo, sizeof(SHFILEINFO),
              SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);

HICONからTICONを作成する

TIcon* icon = new TIcon();
icon->Handle = hIcon;

//何らかの処理
…
//後始末
delete icon

ついでにアイコンをリストビュー(TListView)に表示する

  1. フォームにTListViewとTImageListを配置する

  2. TListViewのSmallImagesプロパティにImageList1を指定する。

  3. TListViewのViewStyleプロパティにvsSmallIconを指定する。

アイコンをリストビュー(TListView)に表示するコード

UnicodeString filename = L"C:\サンプル\テスト.XLS";

//小さいアイコンを取得する
SHFILEINFO shFileInfo;
SHGetFileInfo(filename.c_str(), NULL, &shFileInfo, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
HICON hIcon = shFileInfo.hIcon;

//HICONからTIconへ
TIcon* icon = new TIcon();
icon->Handle = hIcon;

//追加したアイコンのインデックス
int imageIndex = ImageList1->AddIcon(icon);

//リストビューに項目を追加する
TListItem* listitem = ListView1->Items->Add();
listitem->Caption = ExtractFileName(filename);
listitem->ImageIndex = imageIndex;

//後始末
delete icon;

変更履歴