Форум: "Сети";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизОшибка при загрузки страницы в WebBrowser Найти похожие ветки
← →
olorint © (2005-03-23 09:42) [0]Народ помогите разобраться. Разбираюсь с программой (писал не сам).Есть функция, в которой генерируется код 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-23 10:51) [1]olorint © (23.03.05 9:42)
Поставил проверку на готовность страницы, для версий ie ниже 6.0
а что, в IE 6.0 проверять не надо?
У тебя цикл проверки на готовность где? Что он там делает? Проверять на готовность нужно ПОСЛЕ navigate("about:blank"), но ДО Document.Write(PSafeArray(TVarData(v).VArray));
← →
LordNet © (2005-03-23 11:46) [2]Пришли исходники на lordnet@ukr.net если не в лом!!
← →
olorint © (2005-03-23 14:47) [3]
> а что, в IE 6.0 проверять не надо?
Я не совсем ясно выразился. Дело в том , что ie 6.0 позволяет асинхронно обрабатывать страницы и с ним не должно быть проблем. Но проверка работает для всех версий.
вот эти строки и есть цикл Проверяет пока страница не загружена и ждет.while (Form1.Browser.ReadyState <> READYSTATE_COMPLETE) do begin
sleep(300);
Application.ProcessMessages;
end;
← →
Piter © (2005-03-23 22:13) [4]ты вообще понимаешь что я говорю?
Сначала надо сделать Navigate("about:blank"), потом цикл ожидания, ПОТОМ Document.Write(PSafeArray(TVarData(v).VArray));
Сделай такую программу и выложи ее исходный код здесь
← →
olorint © (2005-03-25 11:09) [5]Вот выдержка из программы.
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-25 16:59) [6]Piter © (23.03.05 22:13) [4]
Сначала надо сделать Navigate("about:blank"), потом цикл ожидания
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c