私はこのコードをシェルアイコン(Windowsのエクスプローラに表示されるアイコン)を取得するために使用しています。
誰かがこれらのアイコンを取得するためのより速い方法を経験していますか? SHGetFileInfo
はかなり遅いようです。シェルのアイコンを取得する最速の方法
procedure TForm2.Button1Click(Sender: TObject);
var
FileInfo: TSHFileInfo;
begin
FillChar(FileInfo, SizeOf(FileInfo), 0);
if SHGetFileInfo(PChar('c:\windows\'), 0, FileInfo, SizeOf(FileInfo),
SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX) <> 0 then
DrawIconEx(Canvas.Handle, 10, 10, FileInfo.hIcon, 0, 16, 16, 0, DI_IMAGE or
DI_MASK);
end;
ありがとうございます!
私はこれまで、このメソッドをC++アプリケーションから問題なく使用しました。しかし、少し違いはありますが、フラグ 'SHGFI_ICON'と' SHGFI_USEFILEATTRIBUTES'だけを使用しました。 – alf
速度が問題であれば、確かに 'SHGFI_USEFILEATTRIBUTES'を使用してください。これにより、 'SHGetFileInfo()'は実際のファイルの属性を問い合わせるのをスキップします。時間がかかることがあります。 –