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

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

Ошибка при загрузки страницы в WebBrowser [D6, D7, Win2k, WinXP]


olorint ©   (2005-03-23 09:42:00) 

Народ помогите разобраться. Разбираюсь с программой (писал не сам).Есть функция, в которой генерируется код html страницы, и потом выводиться на форму в компоненте WebBrowser. На некоторыхкомпах программа выдает ошибку "access violation" в строчке Document.Write(PSafeArray(TVarData(v).VArray)).
Поставил проверку на готовность страницы, для версий ie ниже 6.0. Но все равно не помогает. Прошелся пошагово. Параметр Form1.Browser.ReadyState дает значение 4 =READYSTATE_COMPLETE, но ошибка остается. Пробовал перед этим загрузить пустую страницу 'about:blank'. Ноль реакции. Если ставить исключение на ошибку, то удается избежать только вывода сообщения на экран, но Document=nil.Не пойму в чем причина, где я ошибаюсь.
Вот пример кода
var
 V: OleVariant;
 Document: IHTMLDocument2;
 FileStrings : TStrings;
begin
.............................
Document := Form1.Browser.Document as IHTMLDocument2;
V := VarArrayCreate([0, FileStrings.Count-1], varVariant);
for i:= 0 to FileStrings.Count-1 do
begin
  V[i] := FileStrings[i] + chr(13) + chr(10);
end;
while (Form1.Browser.ReadyState <> READYSTATE_COMPLETE) do begin
sleep(300);
Application.ProcessMessages;
end;
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;


Piter   (2005-03-25 16:59:00) [1]

Piter ©   (23.03.05 22:13) [4]
Сначала надо сделать Navigate('about:blank'), потом цикл ожидания


olorint   (2005-03-25 11:09:00) [2]

Вот выдержка из программы.
procedure TForm1.FormActivate(Sender: TObject);
var
V: OleVariant;
Document: IHTMLDocument2;
FileStrings : TStrings;
begin
if Browser.Document = nil then
   Browser.Navigate('about:blank' ) ;
Document := Browser.Document as IHtmlDocument2;
//наполенение Filestrings
................................................
V := VarArrayCreate([0, FileStrings.Count-1], varVariant);
for i:= 0 to FileStrings.Count-1 do
  begin
    V[i] := FileStrings[i] + chr(13) + chr(10);
  end;
while (Form1.Browser.ReadyState < READYSTATE_COMPLETE) do
  begin
    sleep(300);
    Application.ProcessMessages;
  end;
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
end;


Piter   (2005-03-23 22:13:00) [3]

ты вообще понимаешь что я говорю?

Сначала надо сделать Navigate('about:blank'), потом цикл ожидания, ПОТОМ Document.Write(PSafeArray(TVarData(v).VArray));

Сделай такую программу и выложи ее исходный код здесь


olorint   (2005-03-23 14:47:00) [4]


> а что, в IE 6.0 проверять не надо?

Я не совсем ясно выразился. Дело в том , что ie 6.0 позволяет асинхронно обрабатывать страницы и с ним не должно быть проблем. Но проверка работает для всех версий.
вот эти строки и есть цикл Проверяет пока страница не загружена и ждет.
while (Form1.Browser.ReadyState <> READYSTATE_COMPLETE) do begin
sleep(300);
Application.ProcessMessages;
end;


LordNet   (2005-03-23 11:46:00) [5]

Пришли исходники на lordnet@ukr.net если не в лом!!


Piter   (2005-03-23 10:51:00) [6]

olorint ©   (23.03.05 9:42)
Поставил проверку на готовность страницы, для версий ie ниже 6.0


а что, в IE 6.0 проверять не надо?

У тебя цикл проверки на готовность где? Что он там делает? Проверять на готовность нужно ПОСЛЕ navigate('about:blank'), но ДО Document.Write(PSafeArray(TVarData(v).VArray));


Наверх

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