Einzelnen Beitrag anzeigen

Andreas L.

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

AW: IThumbnailCache - Thumbnail ermitteln

  Alt 18. Jan 2013, 06:46
Danke für deine Antwort. Leider bekomme ich eine Access Violation wenn ich hBmp an deine Funktion übergebe.
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project3.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004DF337 in Modul 'Project3.exe'. Lesen von Adresse 00000020' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Delphi-Quellcode:
    GetThumbFromCache(OpenDialog1.FileName, hbmp2, 250);
    image3.Picture.Bitmap.Assign(hDIBToTBitmap(hbmp2)); // auch ohne Assign versucht
Bei einer anderen Routine lässt sich das hBmp einfach an Bitmap.Handle zuweisen.
Delphi-Quellcode:
function GetThumb(AFilePath: string; var hBmp: HBITMAP; AMaxSize: LongInt = 120): HRESULT;
var
  fileShellItemImage: IShellItemImageFactory;
  s: TSize;
begin
  Result := CoInitializeEx(
    nil,
    COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE
  );

  if Succeeded(Result) then
  begin
    Result := SHCreateItemFromParsingName(
      PChar(AFilePath),
      nil,
      IShellItemImageFactory,
      fileShellItemImage
    );

    if Succeeded(Result) then
    begin
      s.cx := AMaxSize;
      s.cy := AMaxSize;
      Result := fileShellItemImage.GetImage(s, SIIGBF_THUMBNAILONLY, hBmp);
    end;

    CoUninitialize;
  end;
end;

...

    getThumb(opendialog1.filename, hbmp, 250);
    image1.Picture.Bitmap.Handle := hbmp;
Andreas Lauß
Blog
  Mit Zitat antworten Zitat