IE and images - я уже в отчаянии...
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 09.02.03 13:53
Оценка:
Ситуация такая: есть проект на Билдере. Есть настройка проги — "Отображать рисунки на страницах". Вариант в прописыванием ключика в реестр (закомментированный кусок кода ниже) не устраивает, ибо глобальный, да и при его изменении надо пересоздавать окно браузера (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();
   }

 }

}
//---------------------------------------------------------------------------
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.