Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];

Вниз

не могу понять почему ошибка   Найти похожие ветки 

 
lordalexander   (2013-01-16 23:40) [0]

Здравствуйте
Есть процедура
procedure TForm2.ExtractLinks(const url: String; const strings: TStrings);
 var
iDoc : IHTMLDocument2;
strHTML : string;
v : Variant;
x : integer;
links : OleVariant;
docURL : string;
URI : TidURI;
aHref : string;
idHTTP : TidHTTP;
begin
 strings.Clear;
URI := TidURI.Create(url) ;
try
docURL := "http://" + URI.Host;
if URI.Path <> "/" then docURL := docURL + URI.Path;
finally
URI.Free;
end;
iDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
try
iDoc.designMode := "on";
while iDoc.readyState <> "complete" do Application.ProcessMessages;
v := VarArrayCreate([0,0],VarVariant) ;
idHTTP := TidHTTP.Create(nil) ;
try
strHTML := idHTTP.Get(url) ;
finally
idHTTP.Free;
end;
v[0]:= strHTML;
iDoc.write(PSafeArray(System.TVarData(v).VArray)) ;
iDoc.designMode := "off";
while iDoc.readyState<>"complete" do Application.ProcessMessages;
links := iDoc.all.tags("A") ;
if links.Length > 0 then
begin for x := 1 to -1 + links.Length do
begin
aHref := links.Item(x).href;
if (aHref[1] = "/") then
aHref := docURL + aHref
else if Pos("about:", aHref) = 1
then aHref := docURL + Copy(aHref, 8, Length(aHref)) ;
strings.Add(aHref) ;
end;
end;
finally
iDoc := nil;
end;
end;

Вызываю ее так
ExtractLinks( http://www.delphimaster.ru/, memo2.Lines);

Выдают ошибку
Помогите понять почему


 
clickmaker ©   (2013-01-16 23:46) [1]

> Помогите понять почему

а из текста ошибки не понятно?


 
lordalexander   (2013-01-17 00:04) [2]

если добавить
if aHref<>"" then
Begin
после aHref := links.Item(x).href;

но перед
if (aHref[1] = "/") then

и добавить End  после strings.Add(aHref) ;
решение правильное?


 
Германн ©   (2013-01-17 02:01) [3]


> решение правильно

Нет.
Правильное решение не ищется методом тыка.


 
lordalexander   (2013-01-17 03:19) [4]

чем же оно не верно седел на дебаге и проверял увидел,  что если в переменную нечего не попадает то все выдает ошибку...

У меня еще одна проблема с этим куском кода возникла.
Если в процедуру попадает  вот этот линк  http://www.ignio.com/r/daily/tod/cancer.html
то не могу выйти вот с этой строки
while iDoc.readyState<>"complete" do Application.ProcessMessages;

не  могу понять почему и как решить проблему


 
Anatoly Podgoretsky ©   (2013-01-17 08:29) [5]

> lordalexander  (17.01.2013 03:19:04)  [4]

Потому что ready State<>"complete"


 
lordalexander   (2013-01-17 10:59) [6]

А как нужно?


 
lordalexander   (2013-01-17 11:20) [7]

убрал из кода

iDoc.designMode := "off";
while iDoc.readyState<>"complete" do
Application.ProcessMessages;

вроде все нормально  если есть другое решение подскажите
блогадарю



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

Форум: "Начинающим";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1358417243
Pcrepair
2013-01-17 14:07
2013.10.06
Замена указателей на Локал.Перем при работе функции в потоке


2-1358524343
Proshka
2013-01-18 19:52
2013.10.06
Строки после обновления


6-1269002359
eu1bc
2010-03-19 15:39
2013.10.06
Компоненты TNMMsg и TNMMsgSer


10-1185454042
savyhinst
2007-07-26 16:47
2013.10.06
Панели инструментов Excel и Word


15-1355480016
azlk52
2012-12-14 14:13
2013.10.06
Запрет приложение вконтакте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский