Re: TWebBrowser
От: Aniskin  
Дата: 17.03.09 18:59
Оценка: 4 (1)
Здравствуйте, 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;
TWebBrowser
От: nextrayz  
Дата: 25.01.09 11:28
Оценка:
Доброго дня
подскажите как не используя буфер обмена(чтобы программа не мешала юзеру) и стороние либы(чтобы не качать повторно уже скачанное не потерять сессии и т.д.) добраться и сохранить картики из WebBrowser
на винт
т.е. что то типа
WebBrowser.OleObject.document.images.item(0).SaveAs('img01.jpg')
при этом не запрашивая(скачивая) их снова
они ж уже где то в памяти лежат. только как к ним добраться?
заранее спасибо...
Re: TWebBrowser
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 26.01.09 08:45
Оценка:
Здравствуйте, nextrayz, Вы писали:

N>подскажите как не используя буфер обмена(чтобы программа не мешала юзеру) и стороние либы(чтобы не качать повторно уже скачанное не потерять сессии и т.д.) добраться и сохранить картики из WebBrowser


Предлагаю что-то вроде такого (тупо до безобразия, но работает ):

1) Получить из загруженного документа список ссылок в загруженном документе.
2) Сделать UrlDownloadToFile() для изображений (допустим отображаются изображения из файлов)
3) Если файл уже загружен — то он будет в кэше и загрузится из кеша Винды (т.е. перекачиватся не будет)
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[2]: TWebBrowser
От: nextrayz  
Дата: 26.01.09 09:50
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Здравствуйте, nextrayz, Вы писали:


N>>подскажите как не используя буфер обмена(чтобы программа не мешала юзеру) и стороние либы(чтобы не качать повторно уже скачанное не потерять сессии и т.д.) добраться и сохранить картики из WebBrowser


DM>Предлагаю что-то вроде такого (тупо до безобразия, но работает ):


DM>1) Получить из загруженного документа список ссылок в загруженном документе.

DM>2) Сделать UrlDownloadToFile() для изображений (допустим отображаются изображения из файлов)
DM>3) Если файл уже загружен — то он будет в кэше и загрузится из кеша Винды (т.е. перекачиватся не будет)

даете гарантию что не будет перекачивать?
Re[3]: TWebBrowser
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 26.01.09 10:40
Оценка:
Здравствуйте, nextrayz, Вы писали:

DM>>3) Если файл уже загружен — то он будет в кэше и загрузится из кеша Винды (т.е. перекачиватся не будет)


N>даете гарантию что не будет перекачивать?


Гарантию дает только господь бог Но судя по тестам — те картинки, что уже отображались — берутся с диска (из кэша), а не заново тянутся.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: TWebBrowser
От: nextrayz  
Дата: 26.01.09 10:42
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Гарантию дает только господь бог Но судя по тестам — те картинки, что уже отображались — берутся с диска (из кэша), а не заново тянутся.


спасибо!
Re[5]: TWebBrowser
От: nextrayz  
Дата: 26.01.09 10:55
Оценка:
Здравствуйте, nextrayz, Вы писали:

N>Здравствуйте, DarkMaster, Вы писали:


DM>>Гарантию дает только господь бог Но судя по тестам — те картинки, что уже отображались — берутся с диска (из кэша), а не заново тянутся.


N>спасибо!


но если кто знает как все таки напрямую добраться до картинки прям в TWebBrowser отпишитесь плиз!!!
Re[6]: TWebBrowser
От: Red Cap Россия  
Дата: 06.03.09 07:39
Оценка:
Здравствуйте, nextrayz, Вы писали:

N>но если кто знает как все таки напрямую добраться до картинки прям в TWebBrowser отпишитесь плиз!!!


"Сохранить как..." -> HTML с изображениями?
Re[7]: TWebBrowser
От: Аноним  
Дата: 17.03.09 12:09
Оценка:
Здравствуйте, Red Cap, Вы писали:

RC>Здравствуйте, nextrayz, Вы писали:


N>>но если кто знает как все таки напрямую добраться до картинки прям в TWebBrowser отпишитесь плиз!!!


RC>"Сохранить как..." -> HTML с изображениями?


Там для тэгов с картинками создаются TControl
и правой кнопкой мыши вызывается попап меню с пунктом save image as...
найди где оно вызывается и далее по тексту программы посмьтри откуда берется изображение.
А для чего это надо?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.