Текущий архив: 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.49 MB
Время: 0.008 c