AnsiString Link;
void __fastcall TFormClient::[COLOR=#000000]WebBrowser1DocumentComplete[/COLOR][COLOR=#000000]([/COLOR]TObject *ASender,
const IDispatch *pDisp, OleVariant &URL[COLOR=#000000])[/COLOR]
[COLOR=#000000]{[/COLOR]
Panel2->Enabled = true;
[COLOR=#000000]}[/COLOR]
void __fastcall TFormClient::[COLOR=#000000]WebBrowser1BeforeNavigate2[/COLOR][COLOR=#000000]([/COLOR]TObject *ASender,
const IDispatch *pDisp, OleVariant &URL, OleVariant &Flags,
OleVariant &TargetFrameName, OleVariant &PostData, OleVariant &Headers,
WordBool &Cancel[COLOR=#000000])[/COLOR]
[COLOR=#000000]{[/COLOR]
Panel2->Enabled = false;
[COLOR=#000000]}[/COLOR]
[COLOR=#000099]//FormCreate[/COLOR]
AnsiString Path = ExtractFilePath[COLOR=#000000]([/COLOR]Application->ExeName[COLOR=#000000])[/COLOR];
Path = Path + [COLOR=#000066]"ADO.ini"[/COLOR];
if[COLOR=#000000]([/COLOR]FileExists[COLOR=#000000]([/COLOR]Path[COLOR=#000000])[/COLOR][COLOR=#000000])[/COLOR]
[COLOR=#000000]{[/COLOR]
TIniFile *Ini;
Ini = new TIniFile[COLOR=#000000]([/COLOR]Path[COLOR=#000000])[/COLOR];
Link = Ini->ReadString[COLOR=#000000]([/COLOR][COLOR=#000066]"Nav"[/COLOR],[COLOR=#000066]"Link"[/COLOR],[COLOR=#000066]"http://Lenailicheva.narod.ru/js2.html"[/COLOR][COLOR=#000000])[/COLOR];
WebBrowser1->Navigate[COLOR=#000000]([/COLOR]Link[COLOR=#000000])[/COLOR];
[COLOR=#000099]//WebBrowser2->Navigate(Link);[/COLOR]
delete Ini;
[COLOR=#000099]/*
В ini файле:
[Nav]
Link = http://Lenailicheva.narod.ru/js2.html
*/[/COLOR]
WebBrowser
Код:
После загрузки [COLOR=#000099]js2.html [/COLOR][COLOR=black]в WebBrowser1 становяться доступны кнопки на Panel2. Эти кнопки вызывают функции javacsript.[/COLOR]
Пример:
Код:
void __fastcall TFormClient::SpeedButton1Click(TObject *Sender)
{
//
try
{
StatusBar1->Panels->Items[0]->Text = "";
CComPtr<IHTMLDocument2>spDoc2;
CComPtr<IHTMLWindow2>spWnd;
WebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) &spDoc2);
spDoc2->get_parentWindow(&spWnd);
VARIANT Out;
spWnd->execScript(WideString("addControl(2)"),WideString("javascript"), &Out);
StatusBar1->Panels->Items[0]->Text = "Инстумент режимов просмотра добавлен в правый верхний угол карты";
}
catch(...)
{
ShowMessage("Не удалось загрузить инструмент режимов просмотра карты");
}
}
{
//
try
{
StatusBar1->Panels->Items[0]->Text = "";
CComPtr<IHTMLDocument2>spDoc2;
CComPtr<IHTMLWindow2>spWnd;
WebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) &spDoc2);
spDoc2->get_parentWindow(&spWnd);
VARIANT Out;
spWnd->execScript(WideString("addControl(2)"),WideString("javascript"), &Out);
StatusBar1->Panels->Items[0]->Text = "Инстумент режимов просмотра добавлен в правый верхний угол карты";
}
catch(...)
{
ShowMessage("Не удалось загрузить инструмент режимов просмотра карты");
}
}
А как быть в следущей ситуации:
Из компьютера, например, вынут сетевой шнур, следовательно Интернет не доступен. В этом случае в окно WebBrowser1 грузиться страница "Не возможно отобразить страницу" и панель снова становиться Enabled = true;
Соотвествнно становяться доступны кнопки, нажатие которых приводит к ошибкам javascript. Как правильно обработать эту ситуацию?
OnNavigateError
Код:
void __fastcall TFormClient::WebBrowser1NavigateError(TObject *ASender,
const IDispatch *pDisp, OleVariant &URL, OleVariant &Frame,
OleVariant &StatusCode, WordBool &Cancel)
{
ShowMessage("Не удалось связаться с сервером");
Panel2->Enabled = false;
}
const IDispatch *pDisp, OleVariant &URL, OleVariant &Frame,
OleVariant &StatusCode, WordBool &Cancel)
{
ShowMessage("Не удалось связаться с сервером");
Panel2->Enabled = false;
}
Затем сразу наступает событие:
Код:
void __fastcall TFormClient::WebBrowser1DocumentComplete(TObject *ASender,
const IDispatch *pDisp, OleVariant &URL)
{
Panel2->Enabled = true;
}
const IDispatch *pDisp, OleVariant &URL)
{
Panel2->Enabled = true;
}
И снова кнопки доступны. Что надо заводить глобальную переменную типа bool и отслеживать ее как флаг? Или есть более правильный способ?
Цитата: lena_ki
Есть код:
...
А как быть в следущей ситуации:
Из компьютера, например, вынут сетевой шнур, следовательно Интернет не доступен. В этом случае в окно WebBrowser1 грузиться страница "Не возможно отобразить страницу" и панель снова становиться Enabled = true;
Соотвествнно становяться доступны кнопки, нажатие которых приводит к ошибкам javascript. Как правильно обработать эту ситуацию?
...
А как быть в следущей ситуации:
Из компьютера, например, вынут сетевой шнур, следовательно Интернет не доступен. В этом случае в окно WebBrowser1 грузиться страница "Не возможно отобразить страницу" и панель снова становиться Enabled = true;
Соотвествнно становяться доступны кнопки, нажатие которых приводит к ошибкам javascript. Как правильно обработать эту ситуацию?
Можно посмотреть, что в BeforeNavigate2 приходит если, что-то типа - res://C:\WINDOWS\System32\shdoclc.dll/navcancl.htm
нет подключения.
ЗЫ: отлов полной загрузки документа организован неправильно, так будет вызваться для каждого фрейма.
Как надо - посмотри в справке или Здесь
Фреймов не будет. Грузиться только карта google.
Cпасибо за ссылку. :)
Цитата: GIZMO
ЗЫ: отлов полной загрузки документа организован неправильно, так будет вызваться для каждого фрейма.
а так тоже по фреймам будет:
Код:
READYSTATE rs;
do
{
spWB->get_ReadyState(&rs);
this->Caption = "Loading...";
Application->ProcessMessages();
Sleep(50);
}while (rs != READYSTATE_COMPLETE && !Stop);
do
{
spWB->get_ReadyState(&rs);
this->Caption = "Loading...";
Application->ProcessMessages();
Sleep(50);
}while (rs != READYSTATE_COMPLETE && !Stop);