Здравствуйте, nextrayz, Вы писали:
N>подскажите как не используя буфер обмена(чтобы программа не мешала юзеру) и стороние либы(чтобы не качать повторно уже скачанное не потерять сессии и т.д.) добраться и сохранить картики из WebBrowser на винт
procedure SaveImageFromIHtmlDocument2(AIHtmlDocument2: IHtmlDocument2; const ADir: string);
var Images: IHTMLElementCollection;
i: Integer;
ImgElement: IHTMLImgElement;
URL: string;
Buff: Pointer;
BuffSize: DWORD;
CacheName: string;
NewName: string;
P: Integer;
ElementRender: IHTMLElementRender;
Bitmap: TBitmap;
begin
if not Assigned(AIHtmlDocument2) then exit;
Images := AIHtmlDocument2.images;
if not Assigned(Images) then exit;
for i := 0 to Images.length - 1 do
if Succeeded(Images.item(i, 0).QueryInterface(IHTMLImgElement, ImgElement)) then
try
CacheName := '';
URL := ImgElement.src;
NewName := URL;
P := LastDelimiter('/', NewName);
if P > 0 then Delete(NewName, 1, P);
NewName := ADir + NewName;
Buff := nil;
BuffSize := 0;
if not RetrieveUrlCacheEntryFile(PChar(URL), TInternetCacheEntryInfo(Buff^), BuffSize, 0) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
begin
GetMem(Buff, BuffSize);
try
if RetrieveUrlCacheEntryFile(PChar(URL), TInternetCacheEntryInfo(Buff^), BuffSize, 0) then
try
CacheName := TInternetCacheEntryInfo(Buff^).lpszLocalFileName;
if CacheName <> '' then
begin
CopyFile(PChar(CacheName), PChar(NewName), False);
Continue;
end;
finally
UnlockUrlCacheEntryFile(PChar(URL), 0);
end;
finally
FreeMem(Buff);
end;
end;
if Succeeded(ImgElement.QueryInterface(IHTMLElementRender, ElementRender)) then
try
Bitmap := TBitmap.Create;
try
with ImgElement as IHTMLElement, Bitmap, Canvas do
begin
Width := offsetWidth;
Height := offsetHeight;
Brush.Color := clWhite;
FillRect(ClipRect);
ElementRender.DrawToDC(Handle);
SaveToFile(NewName + '.bmp');
end;
finally
Bitmap.Free;
end;
finally
ElementRender := nil;
end;
Form1.ListBox1.Items.Add(CacheName);
finally
ImgElement := nil;
end;
end;
Здравствуйте, nextrayz, Вы писали:
N>подскажите как не используя буфер обмена(чтобы программа не мешала юзеру) и стороние либы(чтобы не качать повторно уже скачанное не потерять сессии и т.д.) добраться и сохранить картики из WebBrowser
Предлагаю что-то вроде такого (тупо до безобразия, но работает

):
1) Получить из загруженного документа список ссылок в загруженном документе.
2) Сделать UrlDownloadToFile() для изображений (допустим отображаются изображения из файлов)
3) Если файл уже загружен — то он будет в кэше и загрузится из кеша Винды (т.е. перекачиватся не будет)
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, nextrayz, Вы писали:
N>>подскажите как не используя буфер обмена(чтобы программа не мешала юзеру) и стороние либы(чтобы не качать повторно уже скачанное не потерять сессии и т.д.) добраться и сохранить картики из WebBrowser
DM>Предлагаю что-то вроде такого (тупо до безобразия, но работает
):
DM>1) Получить из загруженного документа список ссылок в загруженном документе.
DM>2) Сделать UrlDownloadToFile() для изображений (допустим отображаются изображения из файлов)
DM>3) Если файл уже загружен — то он будет в кэше и загрузится из кеша Винды (т.е. перекачиватся не будет)
даете гарантию что не будет перекачивать?
Здравствуйте, nextrayz, Вы писали:
DM>>3) Если файл уже загружен — то он будет в кэше и загрузится из кеша Винды (т.е. перекачиватся не будет)
N>даете гарантию что не будет перекачивать?
Гарантию дает только господь бог

Но судя по тестам — те картинки, что уже отображались — берутся с диска (из кэша), а не заново тянутся.
Здравствуйте, DarkMaster, Вы писали:
DM>Гарантию дает только господь бог
Но судя по тестам — те картинки, что уже отображались — берутся с диска (из кэша), а не заново тянутся.
спасибо!
Здравствуйте, nextrayz, Вы писали:
N>Здравствуйте, DarkMaster, Вы писали:
DM>>Гарантию дает только господь бог
Но судя по тестам — те картинки, что уже отображались — берутся с диска (из кэша), а не заново тянутся.
N>спасибо!
но если кто знает как все таки напрямую добраться до картинки прям в TWebBrowser отпишитесь плиз!!!
Здравствуйте, nextrayz, Вы писали:
N>но если кто знает как все таки напрямую добраться до картинки прям в TWebBrowser отпишитесь плиз!!!
"Сохранить как..." -> HTML с изображениями?
Здравствуйте, Red Cap, Вы писали:
RC>Здравствуйте, nextrayz, Вы писали:
N>>но если кто знает как все таки напрямую добраться до картинки прям в TWebBrowser отпишитесь плиз!!!
RC>"Сохранить как..." -> HTML с изображениями?
Там для тэгов с картинками создаются TControl
и правой кнопкой мыши вызывается попап меню с пунктом save image as...
найди где оно вызывается и далее по тексту программы посмьтри откуда берется изображение.
А для чего это надо?