Variant body, imgs, controlRange;
body = VK->OleObject.OlePropertyGet("document").OlePropertyGet("body");
imgs = VK->OleObject.OlePropertyGet("document").OlePropertyGet("images").OleFunction("item", 7);
controlRange = body.OleFunction("createControlRange");
controlRange.OleProcedure("add", imgs);
controlRange.OleProcedure("execCommand", "Copy", false, EmptyParam);
if (Clipboard()->HasFormat(CF_BITMAP))
{
Image1->Picture->Bitmap->LoadFromClipboardFormat(CF_BITMAP, Clipboard()->GetAsHandle(CF_BITMAP), 0);
Clipboard()->Clear();
}
сохранить картинку без ее загрузки
Нужна ваша помощь, подскажите как можно сохранить уже загруженную в WebBrowser картинку, не на Delphi либо на С++ либо JavaScript, перерыл кучу сайтов форумов ничего подходящего не нашел, на Delphi есть такая возможность но в С++ нет таких функций, наверное на Си как то по другому нужно ее получить. Опять же без загрузки, а из уже загруженных. Спасибо огромное тем кто откликнется.
а вы какую библиотеку или фреймворк ли используете для вывода Web-контента? Там, вероятно, есть методы для доступа к содержимому
Я использую компонент WebBrowser, ни каких библиотек не подгружаю
Писание к коду(ссылка на источник):
Следующей задачей является получение самого изображения без повторного его выкачивания из сети по URL. Автору известен способ сделать это используя буфер обмена Windows. Приведенная ниже функция ищет изображение по заданному URL и возвращает Bitmap в экземпляр объекта TImage:
Код:
uses ExtCtrls, mshtml, OleCtrls, ClipBrd, SHDocVw;
function GetBrowserImage(Browser: TWebBrowser; url: string; Image: TImage): boolean;
var body, imgs, controlRange: olevariant;
i: integer;
ImageHref: string;
begin
Result:=false;
body := Browser.OleObject.document.body;
for i := 0 to Browser.OleObject.Document.Images.Length - 1 do
begin
ImageHref := Browser.OleObject.Document.Images.Item(i).Href;
if ImageHref=url then
begin
imgs := Browser.OleObject.document.images.item(i);
controlRange := body.createControlRange;
controlRange.add(imgs);
controlRange.execCommand('Copy', False, EmptyParam);
try
if ClipBoard.HasFormat(CF_BITMAP) then
begin
Image.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
Result:=true;
end;
except
end;
Exit;
end;
end;
end;
function GetBrowserImage(Browser: TWebBrowser; url: string; Image: TImage): boolean;
var body, imgs, controlRange: olevariant;
i: integer;
ImageHref: string;
begin
Result:=false;
body := Browser.OleObject.document.body;
for i := 0 to Browser.OleObject.Document.Images.Length - 1 do
begin
ImageHref := Browser.OleObject.Document.Images.Item(i).Href;
if ImageHref=url then
begin
imgs := Browser.OleObject.document.images.item(i);
controlRange := body.createControlRange;
controlRange.add(imgs);
controlRange.execCommand('Copy', False, EmptyParam);
try
if ClipBoard.HasFormat(CF_BITMAP) then
begin
Image.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
Result:=true;
end;
except
end;
Exit;
end;
end;
end;
Код:
long i;
IHTMLDocument2* iDoc;
IDispatch* iDisp;
IHTMLElement* IElement;
IHTMLSelectElement* iSelectElement;
IHTMLInputElement *iInputElement;
IHTMLOptionElement* iOptionElement;
IHTMLAnchorElement* IAnchorElement;
IHTMLScriptElement *IScriptElement;
IHTMLBodyElement* IBodyElement;
IHTMLTextAreaElement* iTextAreaElement;
IHTMLImgElement* iImgElement;
IHTMLFormElement* iFormElement;
IHTMLElementCollection* iElementCollection=NULL;
if( Form1->VK->ControlInterface->Document)
{
Form1->VK->ControlInterface->Document->QueryInterface(__uuidof( IHTMLDocument2),(void**)&iDoc);
}
long p;
TVariant index = 1;
iDoc->get_images(&iElementCollection);
iElementCollection->item(index,TVariant(0),&iDisp);
if(iDisp)
{
TComInterface<IHTMLElement> pElement;
iDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement);
if(pElement)
{
Image1->....??????
}
}
IHTMLDocument2* iDoc;
IDispatch* iDisp;
IHTMLElement* IElement;
IHTMLSelectElement* iSelectElement;
IHTMLInputElement *iInputElement;
IHTMLOptionElement* iOptionElement;
IHTMLAnchorElement* IAnchorElement;
IHTMLScriptElement *IScriptElement;
IHTMLBodyElement* IBodyElement;
IHTMLTextAreaElement* iTextAreaElement;
IHTMLImgElement* iImgElement;
IHTMLFormElement* iFormElement;
IHTMLElementCollection* iElementCollection=NULL;
if( Form1->VK->ControlInterface->Document)
{
Form1->VK->ControlInterface->Document->QueryInterface(__uuidof( IHTMLDocument2),(void**)&iDoc);
}
long p;
TVariant index = 1;
iDoc->get_images(&iElementCollection);
iElementCollection->item(index,TVariant(0),&iDisp);
if(iDisp)
{
TComInterface<IHTMLElement> pElement;
iDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement);
if(pElement)
{
Image1->....??????
}
}
Народ ну помогите пожалуйста, готов выплатить вознограждение за помощь!
Замучался но нашел решение: