Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Web браузер   Найти похожие ветки 

 
Igit ©   (2002-12-23 18:11) [0]

Как мне реализовать... такую вещь... прога открывает URL веб страницы, дожидается его загрузки, и все картинки с него сохраняет на диск


 
Хмырь ©   (2002-12-23 18:19) [1]

Нууу! Несерьезно... Это даже я знаю (что весьма удивительно)
:-). Все через компонент WebBrowser на панели компонентов Internet...

ЗЫ. Проще возми готовую прогу типа WebImage...


 
Ihor Osov'yak ©   (2002-12-23 18:20) [2]

TWebBrowser, OnDocumentComplete

С картинками несколько труднее будет. Нет штатного способа выдернуть с TWebBrowser(либо я не знаю). Я делал так:
- или ищем в кеше
- или грузим по новой каким-то загрузчиком
- или дергаем с того же TWebBrowser через IViewObject, но это только с видимых областей TWebBrowser, то, что осталось за кадром - см. первых два варианта ...


 
Ihor Osov'yak ©   (2002-12-23 18:22) [3]

2 Хмырь © (23.12.02 18:19)

ну с, молодой человек, просветите насчет картинок.. Убедительна просьба перед тем как делать просвещение самому убедится в работоспособности просвещения :-).


 
Ketmar ©   (2002-12-23 18:26) [4]

способ есть, но "черезтудой". %-) перехватить все качаемые файлы и отсортировывать картинки. если мне не изменяет склероз, то это не так сложно.

Satanas Nobiscum! 23-Dec-XXXVII A.S.


 
Igit ©   (2002-12-23 18:26) [5]

Это... яндекс замучил, может кините по быстрому эти компоненты на мыло, pls


 
Ihor Osov'yak ©   (2002-12-23 18:34) [6]

2 Ketmar © (23.12.02 18:26)

Ну да. Забыл упомянуть. Два варианта - "локальный прокси" и app (ассинхронные настраиваимые протоколы, pluggable protocols, see msdn). Но то и то значительно более трудоемко (вариант app делал, но несколько для других целей, вариант прокси обсуждался на уровне идеи с коллегами), чем повторная загрузки или выдергивание с кеша (последнее не очень надежно, так как картинки там может и не быть)


 
Ihor Osov'yak ©   (2002-12-23 18:36) [7]

2 Igit © (23.12.02 18:26)

о компоненте см http://delphi.vitpc.com/mastering/tweb.htm :-)
об остальном в бвух словах не раскажешь...




 
Igit ©   (2002-12-23 18:38) [8]

Спасибо... щас почитаю...


 
Ketmar ©   (2002-12-23 18:46) [9]

мда. local proxy у меня стоит. и честно кэшит почти все интересное, что через него летает. заодно баннерье рубит. удобно... %-)

Satanas Nobiscum! 23-Dec-XXXVII A.S.


 
Хмырь ©   (2002-12-23 18:50) [10]

2Ihor Osov"yak

> ну с, молодой человек, просветите насчет картинок..
> Убедительная просьба перед тем как делать просвещение самому
> убедится в работоспособности просвещения :-).

Ну вот... Обижают... :-)

2Igit
Свои исходники я посеял, но делал немного корявей, чем Ketmar. Находил все линки:

...
var i: Integer;
...
for i := 0 to Webbrowser1.OleObject.Document.links.Length - 1 do
Listbox1.Items.Add
(Webbrowser1.OleObject.Document.Links.Item(i));
...


Затем отсортировывал их (если в строке есть кусок типа jpg или gif), и закачивал с помощью ShellAPI. Типа так (пример не мой, где-то валялся на одной из конференций в ФИДО):

uses
URLMon, ShellApi;
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
// URL Location
SourceFile = " http://www.google.com/intl/de/images/home_title.gif";
// Where to save the file
DestFile = "c:\temp\google-image.gif";
begin
if DownloadFile(SourceFile, DestFile) then
begin
ShowMessage("Download succesful!");
// Show downloaded image in your browser
ShellExecute(Application.Handle, PChar("open"), PChar(DestFile),
PChar(""), nil, SW_NORMAL)
end
else
ShowMessage("Error while downloading " + SourceFile)
end;


 
Ihor Osov'yak ©   (2002-12-23 18:56) [11]

2 Хмырь © (23.12.02 18:50)

Да не обижает то здесь никто.

Цитирую:

> Все через компонент WebBrowser на панели компонентов Internet...


Решение, приведенное вами - повторная загрузка с помощью третьих средств (не TWebBrowser) - собственно на что и Вам намекалось..

ЗЫ - "Уточните значение слов, и вы избавите человечество от большей части его заблуждений"
с. Рене Декарт





 
gsu ©   (2002-12-23 18:58) [12]

вначале было слово


 
Хмырь ©   (2002-12-23 19:06) [13]

2Ihor Osov"yak
Свои слова: "Все через компонент WebBrowser на панели компонентов Internet..." беру обратно.

ЗЫ. Раз я делаю неправильно (я в Вашем авторитете не сомневаюсь), тогда вразумите непутевого как надо...


 
Хмырь ©   (2002-12-23 19:11) [14]


> gsu ©
> вначале было слово


In the beginning was the Word, and the Word was 1.0...


 
Igit ©   (2002-12-23 19:12) [15]

Ihor Osov"yak, а как подергать с того же TWebBrowser через IViewObject с видимых областей TWebBrowser


 
Ihor Osov'yak ©   (2002-12-23 19:13) [16]

2 Хмырь © (23.12.02 19:06)

Все делаете Вы правильно, только не с помощью одного wb :-).
То есть Все через компонент WebBrowser на панели компонентов Internet... кореектнее бы - первую часть задачи через WebBrowser на панели компонентов Internet и то с оговоркой - ибо этот компонент появился там только с D5, раньше было нужно делать импорт соотв. активИкс...

Вторую часть - см. выше, в т.ч. и вашим способом (но это уже wb)...

И не кокетничайте по поводу путевости/непутевости..


 
gsu ©   (2002-12-23 19:14) [17]

In the beginning was the Word, and the Word was Tex


 
Ihor Osov'yak ©   (2002-12-23 19:15) [18]

2 Igit © (23.12.02 19:12)


Что - то типа этого, IViewObject - uses activeX;

procedure TFormOCR.DoProcess(iDoc: IDispatch;
top, left, height, width: integer;
YMax,XMax:integer);

var
ViewObject: IViewObject;
sourceDrawRect,srcRect,destRect: TRect;

begin
//_Pause;
//fEnClose:=true;
//Close;
if not assigned(iDoc) then Exit;

iDoc.QueryInterface(IViewObject, ViewObject);
if not assigned(ViewObject) then exit;

ImageMain.Align := alNone;

ImageMain.Width := xMax;
ImageMain.Height := yMax;
imgTask.Width:= width;
imgTask.Height:=height;
sourceDrawRect := Rect(0, 0, ImageMain.Width, ImageMain.Height);
ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,
imageMain.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
ViewObject := nil;

srcRect:=Rect(left,top,left+width,top+height);
destRect:=Rect(0,0,width,height);
imgTask.Canvas.CopyRect(destRect,ImageMain.Canvas,srcRect);

//inc(ii);
//imgTask.Picture.SaveToFile("c:\y"+IntToStr(ii)+".bmp");

Timer1.Enabled:=true;
enAutoClose:=true;
ShowModal;


end;


 
Igit ©   (2002-12-23 19:16) [19]

вообще, переформулю свойвопрос, как мне получить код страницы из нижнего фрейма для анализа на src=*.jpg


 
Ihor Osov'yak ©   (2002-12-23 19:17) [20]

Timer1, enAutoClose к сабжу отношения не имеют,
ImageMain: TImage; - то, куда дергаем


 
Ihor Osov'yak ©   (2002-12-23 19:20) [21]

Для получения координат картинки можно юзать чего то примерно так
function GetAbsOffsetTop(iElem:IHtmlElement):integer;
var parent:IHTMLElement;

begin
//ii:=iElem.get_offsetTop;
result := iElem.get_offsetTop;
parent := iElem.Get_offsetParent;
if assigned(parent) then result := result +GetAbsOffsetTop(parent);
end;

function GetAbsOffsetLeft(iElem:IHtmlElement):integer;
var parent:IHTMLElement;
begin
result := iElem.get_offsetLeft;
parent := iElem.Get_offsetParent;
if assigned(parent) then result := result +GetAbsOffsetLeft(parent);

end;



Страницы: 1 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.032 c
1-37196
Labert
2002-12-29 20:20
2003.01.13
Философский вопрос


14-37386
Sergy
2002-12-25 11:14
2003.01.13
Kylix + MySql + Windows


14-37334
Intras
2002-12-24 10:58
2003.01.13
Защита данных при помощи PGP


7-37414
sural
2002-10-27 05:47
2003.01.13
Как программно включить компьютер?


3-36973
Keymaster
2002-12-16 22:43
2003.01.13
Как читать базу без DBGRID