![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при загрузки страницы в 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));