Главная страница
    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.004 c
15-1366925402
Юрий
2013-04-26 01:30
2013.10.06
С днем рождения ! 26 апреля 2013 пятница


15-1366807381
O'ShinW
2013-04-24 16:43
2013.10.06
Способности человека. Летучая мышь / Смерш


2-1357874385
Ghost del vonte
2013-01-11 07:19
2013.10.06
SFX


15-1367181002
Юрий
2013-04-29 00:30
2013.10.06
С днем рождения ! 29 апреля 2013 понедельник


15-1366917087
О-Сознание
2013-04-25 23:11
2013.10.06
VCL построена на "сигналах-слотах"?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский