Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.10.2012, 16:11
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию Ошибка сохранении картинки из twebbrowser

Вот такая ошибка при попытки сохранения капчи с м.вк в браузере
http://i44.fastpic.ru/big/2012/1018/...aa15663b21.png

вот код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw,urlmon,mshtml,wininet;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    type
  IHTMLElementRender = interface(IUnknown)
    ['{3050F669-98B5-11CF-BB82-00AA00BDCE0B}']
    function DrawToDC
      ( _hDC:                      HDC
      ): HResult; stdcall;
  end;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetCacheFileName(const Url: string; var FileName: string): Boolean;
var
  Info: PInternetCacheEntryInfo;
  InfoBufSize: Cardinal;
begin
  Result := False;
  InfoBufSize := 0;
  GetUrlCacheEntryInfo(PChar(Url),
    TInternetCacheEntryInfo(nil^), InfoBufSize);
  if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin
    GetMem(Info, InfoBufSize);
    try
      Result := GetUrlCacheEntryInfo(PChar(Url),
        TInternetCacheEntryInfo(Info^), InfoBufSize);
      if Result then begin
        FileName := Info^.lpszLocalFileName;
      end;
    finally
      FreeMem(Info);
    end;
  end;
end;

procedure SaveImageFromIHtmlDocument2(AIHtmlDocument2: IHtmlDocument2; const ADir: string);
var Images: IHTMLElementCollection;
    i, P: Integer;
    ImgElement: IHTMLImgElement;
    Buff: Pointer;
    BuffSize: DWORD;
    URL: String;
    NewName: string;
    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
    URL := ImgElement.src;
    NewName := URL;
    P := LastDelimiter('/', NewName);
    if P > 0 then Delete(NewName, 1, P);
    NewName := ChangeFileExt(ADir + NewName, '.bmp');
    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
          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);
              end;
            finally
              Bitmap.Free;
            end;
          finally
            ElementRender := nil;
          end;
        finally;
        end;
      finally
        ImgElement := nil;
      end;
    end;
  finally
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

SaveImageFromIHtmlDocument2(WebBrowser1.Document as IHTMLDocument2, 'd:\');

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Silent:=true;
webbrowser1.Navigate('m.vk.com/');
end;

end.

В чем проблема?
Спасибо!
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #2  
Старый 18.10.2012, 16:17
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

написано же "Синтаксическая ошибка в имени файла"!!!
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 18.10.2012, 16:36
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию

Цитата:
Сообщение от NumLock
написано же "Синтаксическая ошибка в имени файла"!!!
Это я понял,но если я меняю название файла например на капча, ошибки нет, но и картинка не сохраняется

Код:
****************SaveToFile(NewName);
это же строка отвечает за название?
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #4  
Старый 18.10.2012, 17:48
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от scroyler
Это я понял,но если я меняю название файла например на капча, ошибки нет, но и картинка не сохраняется
Как это не сохраняется? Вообще файл не сохраняется или сохраняется не то что тебе нужно?
Цитата:
Сообщение от scroyler
Код:
****************SaveToFile(NewName);
это же строка отвечает за название?
Да, эта. Только лучше перепиши её по-человечески вот так:
Код:
Bitmap.SaveToFile(NewName);
А ещё лучше вообще избавься от конструкции with, так как после строчки:
Код:
with ImgElement as IHTMLElement, Bitmap, Canvas do
мозги можно сломать что к чему относится.
Ответить с цитированием
  #5  
Старый 19.10.2012, 15:20
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию

ставлю другое имя нет ошибок,но и картинка не сохраняется
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #6  
Старый 19.10.2012, 15:26
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от scroyler
ставлю другое имя нет ошибок,но и картинка не сохраняется
Ты мне так и не ответил на вопрос. Ладно, сделай так:
Код:
Bitmap.SaveToFile('C:\Картинка.bmp');
Появился файл в корне диска C?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:59.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025