Ситуация такая: есть проект на Билдере. Есть настройка проги — "Отображать рисунки на страницах". Вариант в прописыванием ключика в реестр (закомментированный кусок кода ниже) не устраивает, ибо глобальный, да и при его изменении надо пересоздавать окно браузера (TCppWebBrowser), что не есть хорошо. Пока дошел только до кода, приведенного ниже, но это обман (рисунки-то загружаются с сервера, да и крестики вместо рисунков — плохо). Экмпериментировал с реализацией IOleClientSite — AV получаю... Думается, что наиболее лучшим, но и гиморным решением будет вручную реализовывать хост для IE. Что само по себе убивает простоту использования компонент
Собственно, вопрос: как реализовать наиболее безболезненно запрещение загрузки рисунков (именно в Билдере; примеров на VC куча, все прекрасно, да вот в Билдере надо, а там ручками много не понаделаешь ;( ).
Собственно, код:
void __fastcall TForm1::DisplayIEImages(bool Enable)
{
/*
TRegistry* Reg = new TRegistry;
if(Reg)
{
if(Reg->OpenKey("Software\\Microsoft\\Internet Explorer\\Main",false))
{
Reg->WriteString("Display Inline Images", Enable? "yes" : "no");
Reg->CloseKey();
}
delete Reg;
}
*/
if(wbBrowser->Document)
{
IHTMLDocument2* HTMLDoc = NULL;
if(SUCCEEDED(wbBrowser->Document->QueryInterface(IID_IHTMLDocument2,(void**)&HTMLDoc)) && HTMLDoc)
{
IHTMLElementCollection* Images = NULL;
if(SUCCEEDED(HTMLDoc->get_images(&Images)) && Images)
{
long ImagesCount = 0;
if(SUCCEEDED(Images->get_length(&ImagesCount)))
{
for(int i=0;i<ImagesCount;i++)
{
IHTMLImgElement* Image = NULL;
IDispatch* Disp = NULL;
if(SUCCEEDED(Images->item(TVariant(i),TVariant(),&Disp)) && Disp)
{
if(SUCCEEDED(Disp->QueryInterface(IID_IHTMLImgElement,(void**)&Image)) && Image)
{
if(!Enable)
{
Image->put_src(L"x");
}
Image->Release();
}
Disp->Release();
}
}
}
Images->Release();
}
HTMLDoc->Release();
}
}
}
//---------------------------------------------------------------------------