Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как скопировать картинку из TWebBrowser в TImage? [D7, WinXP]


Jetus ©   (2006-10-25 10:28:00) 

На страничке в моём WebBrowser'e есть несколько картинок. На форме также есть компонент TImage.
Как мне скопировать конкретную картинку из браузера в TImage?


MetalFan   (2006-10-25 16:09:00) [1]

супер) в FAQ бы это... а то чтото не нашел нигде)


Gero   (2006-10-25 15:58:00) [2]

Что-то вроде этого:


uses
 ExtActns, WinInet;

type
 TForm1 = class(TForm)
   FDownloadURL: TDownloadURL;
 end;

implementation

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
         FileName := Info^.lpszLocalFileName;
     finally
       FreeMem(Info);
     end;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FDownloadURL := TDownloadURL.Create(nil);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 FDownloadURL.Free;
end;

procedure TForm1.SaveImageFromIE(Image: IHTMLImgElement; const SaveFileName: string);
var
 URL: string;
 CacheFileName: string;
begin
 URL := Image.src;
 if LowerCase(Copy(URL, 1, 7)) = 'file://' then
   CopyFile(PChar(URL), PChar(SaveFileName), False)
 else
   begin
     if GetCacheFileName(URL, CacheFileName) and FileExists(CacheFileName) then
       CopyFile(PChar(CacheFileName), PChar(SaveFileName), False)
     else
       begin
         FDownloadURL.URL := URL;
         FDownloadURL.Filename := SaveFileName;
         FDownloadURL.ExecuteTarget(nil);
       end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Image: IHTMLImgElement;
begin
 Image := (WebBrowser.Document as IHTMLDocument2).images.item('my_img', 0) as IHTMLImgElement;
 if Image <> nil then
   SaveImageFromIE(Image, 'C:\MyImg.jpg');
end;


Писал здесь, поэтому могут быть ошибки.


MetalFan   (2006-10-25 15:46:00) [3]

так изображение уже дб на диске во временной дирестории ие. вот только как узнать где оно?
а как сохранить в файл картинку?


Gero   (2006-10-25 15:40:00) [4]

> [3] MetalFan ©   (25.10.06 15:24)

Это был плохой код. Хороший код грузить без надобности не будет.
Через клипбоард очень плохой вариант, так как у пользователя там может быть все, что угодно включая пароль на винду, код к подьезду и пин кредитной карточки.


MetalFan   (2006-10-25 15:24:00) [5]


> Gero ©   (25.10.06 15:17) [2]
>
> Сохранить на диске, потом загрузить в TImage.

видел код, но он снова грузит картинку из инета по ее src...
через клипборд без повторной загрузки...


Gero   (2006-10-25 15:17:00) [6]

Сохранить на диске, потом загрузить в TImage.


MetalFan   (2006-10-25 15:13:00) [7]

знаю, как через буфер обмена можно сделать


Наверх

Титульная страница Поиск, карта сайта Написать письмо