Hi,
ich möchte mit dem Interface
IThumbnailCache das gecachte Thumbnail für ein Bild ermitteln. Dazu habe ich folgende Funktion geschrieben:
Delphi-Quellcode:
function GetThumbFromCache(AFileName: string; var hBmp: HBITMAP; AMaxSize: Integer = 120): HRESULT;
var
thumbcache: IThumbnailCache;
sharedbmp: ISharedBitmap;
shellitem: IShellItem;
thumbflags: PWTS_CACHEFLAGS;
thumbid: PWTS_THUMBNAILID;
thumbsize: TSize;
begin
Result := CoCreateInstance(
CLSID_LocalThumbnailCache,
nil,
CLSCTX_INPROC,
IThumbnailCache,
thumbcache
);
if Succeeded(Result) then
begin
Result := SHCreateItemFromParsingName(
PChar(AFileName),
nil,
IShellItem,
shellitem
);
if Succeeded(Result) then
begin
Result := thumbcache.GetThumbnail(
shellitem,
AMaxSize,
WTS_EXTRACT,
sharedbmp,
nil,
nil
);
if Succeeded(Result) then
begin
{sharedbmp.GetSize(thumbsize);
ShowMessage(IntToStr(thumbsize.cx) + ' - ' + IntToStr(thumbsize.cy)); } // <-- gibt die richtige Größe aus
Result := sharedbmp.GetSharedBitmap(hBmp);
end;
CoUninitialize;
end;
end;
end;
Beim Aufruf wird in hBmp ein
Handle eingetragen. Das Image zeigt aber nichts an. Weiß jemand was ich falsch mache?
Delphi-Quellcode:
GetThumbFromCache(OpenDialog1.FileName, hbmp);
image3.Picture.Bitmap.Handle := hbmp;
// image3.Refresh, Repaint, etc. hilft auch nichts