|
|
||||
Tips > |
|||||
exe 以外のファイルからアイコン抽出(SHGetFileInfo) |
更新 : 2010/06/17 |
||||
|
|
||
解説: これまでも、実行ファイルのアイコン抽出(ExtractIcon 関数)や、システムアイコンを抽出(LoadIcon 関数)する方法を見てきました。 今回は、Win32API の SHGetFileInfo 関数を使って、実行ファイル以外のファイルからアイコンを抽出してみます。 この関数は、以下のように定義されています。 DWORD_PTR SHGetFileInfo( LPCTSTR pszPath, // ファイルのフルパスを指定 DWORD dwFileAttributes, // 通常は 0 SHFILEINFO *psfi, // SHFILEINFO 構造体 UINT cbFileInfo, // SHFILEINFO 構造体のサイズ UINT uFlags // 取得する情報のフラグ ); この関数を利用するには、shellapi.h をインクルードする必要があります。 使用例: アプリケーション起動後、Button1 をクリックしてファイルを指定すると、ファイルから抽出されたアイコンが Image1 に表示されます。 アイコンは、実行ファイル以外のファイルからも抽出できます。 コンポーネントは Image, Button, OpenDialog をひとつずつ配置してください。 Button1 の OnClick イベントハンドラで OpenDialog1 を呼び出して、任意のファイルを選択します。 SHGetFileInfo 関数に必要な引数を渡し、アイコンのハンドルを取得します。 TIcon オブジェクトからイメージを Image1 にコピーすることで、ファイルから抽出されたアイコンが表示されます。 いろいろなファイルを選択して、アイコンを抽出してみてください。 #include <shellapi.h> //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (!OpenDialog1->Execute()) return; TIcon *icon = new TIcon; SHFILEINFO fileinfo; SHGetFileInfo(OpenDialog1->FileName.c_str(), 0, &fileinfo, sizeof(fileinfo), SHGFI_ICON); icon->Handle = fileinfo.hIcon; Image1->Picture->Icon->Assign(icon); delete icon; } //------------------------------------------------------------------- |