私はシェルに基づいたリストビューを開発しています。シェルアイコン/画像を抽出しようとすると...IExtractImageを使用してサムネイルを抽出しようとしますが、失敗した場合は、IExtractIconを使用してアイコンを抽出しようとすると、最大のアイコンサイズが得られますが、IExtractIconは奇妙な結果をもたらします。問題は、画像リストからアイコンを抽出する方法を使用しようとしましたが、大きなアイコン(256x256)がない場合、アイコンの左上の位置に小さなアイコンがレンダリングされ、見栄えがよくありません。そのため、代わりにIExtractIconを使用しようとしています。しかし、私のイメージリスト抽出方法で256x256アイコンとして表示されるアイコンは、アイコンサイズを33大と16小と報告します。では、大きな(256x256)アイコンが存在するかどうかを確認するにはどうすればよいですか?さらに情報が必要な場合は、サンプルコードを提供できます。
if PThumb.Image = nil then
begin
OleCheck(ShellFolder.ParseDisplayName(0, nil, StringToOleStr(PThumb.Name), Eaten, PIDL, Atribute));
ShellFolder.GetUIObjectOf(0, 1, PIDL, IExtractIcon, nil, XtractIcon);
CoTaskMemFree(PIDL);
bool:= False;
if Assigned(XtractIcon) then
begin
GetLocationRes := XtractIcon.GetIconLocation(GIL_FORSHELL, @Buf, sizeof(Buf), IIdx, IFlags);
if (GetLocationRes = NOERROR) or (GetLocationRes = E_PENDING) then
begin
Bmp := TBitmap.Create;
try
OleCheck(XtractIcon.Extract(@Buf, IIdx, LIcon, SIcon, 32 + (16 shl 16)));
Done:= False;
Roy M Klever