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;