Ok, pues te dejo esta función que hace justo lo que quieres.
Con esta función puedes generar el thumbnail, a apartir de la ruta hasta el fichero. Hay varias formas de hacer esto, pero esta es la que mejor me ha funcionado.
Código Delphi
[-]
function GetThumbnail(lpPathName, lpFileName: PWideChar; Width, Height: Integer): TBitmap;
var
Desktop, Folder: IShellFolder;
ItemIDList: PItemIDList;
Flags, Priority: Cardinal;
ExtractImage: IExtractImage;
Res: HRESULT;
hBitmap: Windows.HBITMAP;
Buffer: array[0..MAX_PATH-1] of WideChar;
Size: TSize;
begin
Result := nil;
SHGetDesktopFolder(Desktop);
if LongBool(Desktop.ParseDisplayName(0, nil, lpPathName, PDWORD(0)^, ItemIDList, PDWORD(0)^)) then Exit;
Desktop.BindToObject(ItemIDList, nil, IShellFolder, Folder);
CoTaskMemFree(ItemIDList);
if LongBool(Folder.ParseDisplayName(0, nil, lpFileName, PDWORD(0)^, ItemIDList, PDWORD(0)^)) then Exit;
Folder.GetUIObjectOf(0, 1, ItemIDList, IExtractImage, nil, ExtractImage);
CoTaskMemFree(ItemIDList);
if not Assigned(ExtractImage) then Exit; Size.cx := Width; Size.cy := Height; Priority := 0;
Flags := $28;
Res := ExtractImage.GetLocation(Buffer, SizeOf(Buffer), Priority, Size, 24, Flags);
if (Res = NOERROR) or (Res = E_PENDING) then
begin
if not LongBool(ExtractImage.Extract(hBitmap)) then
begin
Result := TBitmap.Create;
Result.Handle := hBitmap;
end;
end;
end;
¿cómo utilizarla? Por ejemplo:
Código Delphi
[-]
Var
bmp:TBitmap;
vFichero:WideString;
vRuta:WideString;
begin
vRuta := ExtractFilePath(path_fichero_pdf);
vFichero := ExtractFilename(path_fichero_pdf);
bmp := GetThumbnail(PWideChar(vRuta), PWideChar(vFichero), 122, 200);
Image1.Picture.Assign(bmp);
freeandnil(bmp)
Espero que te ayude.
Cualquier cosa, consulta sin problemas.
Un saludo.