const
IID_IHTMLElementRender: TGUID = '{3050F669-98B5-11CF-BB82-00AA00BDCE0B}';
type
IHTMLElementRender = interface(IUnknown)
['{3050F669-98B5-11CF-BB82-00AA00BDCE0B}']
function DrawToDC(_hDC: HDC): HResult; stdcall;
function SetDocumentPrinter(bstrPrinterName: WideString; _hDC: HDC): HResult; stdcall;
end;
Конвертация картинок в Internet Explorer в TBitMap
C IE Работаю через TInternetExplorer.
В интернете нашёл что любой HTML элемент можно какстить к IHTMLElementRender и потом уже звать метод DrawToDC. Но делфи даёт эксепшн что такой интерфейс незаимплеменчён.
Код:
Вариант со скачиванием каринок по src Не предлагать, не подходит.
Вот вариант функции -
Код:
function GetBitMapFromInterface(Int: IUnknown): TBitMap;
var
Render: IHTMLElementRender;
Image: IHTMLImgElement;
begin
Result := nil;
if Int = nil then
Exit;
if Int.QueryInterface(IHTMLImgElement, Image) <> S_OK then
Exit;
if Image.QueryInterface(IHTMLElementRender, Render) <> S_OK then
Exit; // Тут вываливается
if Render = nil then
Exit;
if (Image.Width < 1) or (Image.Height < 1) then
Exit;
Result := TBitMap.Create;
Result.Width := Image.Width;
Result.Height := Image.Height;
Result.PixelFormat := pf24bit;
Render.DrawToDC(Result.Canvas.Handle);
end;
var
Render: IHTMLElementRender;
Image: IHTMLImgElement;
begin
Result := nil;
if Int = nil then
Exit;
if Int.QueryInterface(IHTMLImgElement, Image) <> S_OK then
Exit;
if Image.QueryInterface(IHTMLElementRender, Render) <> S_OK then
Exit; // Тут вываливается
if Render = nil then
Exit;
if (Image.Width < 1) or (Image.Height < 1) then
Exit;
Result := TBitMap.Create;
Result.Width := Image.Width;
Result.Height := Image.Height;
Result.PixelFormat := pf24bit;
Render.DrawToDC(Result.Canvas.Handle);
end;
Помогите сконверить кортинки в TBitMap.
Если есть решение, поделитесь, пожалуйста.
Какой код ошибки возвращает Image.QueryInterface?