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

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

не могу понять почему ошибка [D7, WinXP]


lordalexander ©   (2013-01-16 23:40:00) 

Здравствуйте
Есть процедура
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);

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


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

убрал из кода

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

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


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

А как нужно?


Anatoly Podgoretsky   (2013-01-17 08:29:00) [3]

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

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


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

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

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

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


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


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

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


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

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

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

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


clickmaker   (2013-01-16 23:46:00) [7]

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

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


Наверх

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