Einzelnen Beitrag anzeigen

Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#1

IThumbnailCache - Thumbnail ermitteln

  Alt 15. Jan 2013, 16:09
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
Andreas Lauß
Blog
  Mit Zitat antworten Zitat