Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CppWebBrouwser длина страницы?

520
30 мая 2007 года
inkognitum
155 / / 03.05.2006
Добрый день!
Подскажите пожалуйста как?
Как можно узнать в пикселях длину всей HTML страницы загруженной в CppWebBrouwser?

Если это невозможно, то как хотябы определить влазиет ли страница в пределах длины CppWebBrowser или же есть Scroll?

Пытался узнавать методами - GetPosScroll, GetInfoScroll функции возвращают всегда 0.

Буду очень благодарен!
4.6K
01 июня 2007 года
Tokolist
268 / / 22.03.2007
GetScrollInfo и GetScrollPos не срабатывают, как я понимаю, через то, что скроллбары появляются не у окна, а у элемента страницы body.


Я бы делал что-то вроде этого (Delphi, но важен сам принцип):


 
Код:
var
  Doc: IHTMLDocument2;
begin
  Doc := WebBrowser1.Document as IHTMLDocument2;
  ShowMessage(VarAsType(Doc.body.offsetHeight, varString));


Хотя это не совсем то, но близко.
Искал на МСДН, вроде подходящего свойства я не нашел, но путь для поисков я тебе указал. Смотри также

http://msdn2.microsoft.com/en-us/library/aa752127.aspx
http://msdn2.microsoft.com/en-us/library/aa752116.aspx
http://msdn2.microsoft.com/en-us/library/aa741505.aspx
http://msdn2.microsoft.com/en-us/library/aa752574.aspx
http://msdn2.microsoft.com/en-us/library/aa752279.aspx
520
01 июня 2007 года
inkognitum
155 / / 03.05.2006
Цитата: Tokolist
GetScrollInfo и GetScrollPos не срабатывают, как я понимаю, через то, что скроллбары появляются не у окна, а у элемента страницы body.


Я бы делал что-то вроде этого (Delphi, но важен сам принцип):


 
Код:
var
  Doc: IHTMLDocument2;
begin
  Doc := WebBrowser1.Document as IHTMLDocument2;
  ShowMessage(VarAsType(Doc.body.offsetHeight, varString));


Хотя это не совсем то, но близко.
Искал на МСДН, вроде подходящего свойства я не нашел, но путь для поисков я тебе указал. Смотри также

http://msdn2.microsoft.com/en-us/library/aa752127.aspx
http://msdn2.microsoft.com/en-us/library/aa752116.aspx
http://msdn2.microsoft.com/en-us/library/aa741505.aspx
http://msdn2.microsoft.com/en-us/library/aa752574.aspx
http://msdn2.microsoft.com/en-us/library/aa752279.aspx



Спасибо большое, буду искать.

520
02 июня 2007 года
inkognitum
155 / / 03.05.2006
Угу, разузнал все, перевел, вот что получил:
 
Код:
#include "mshtml.h"
. . . . .
 IHTMLDocument2 *pHTMLDocument = NULL; IHTMLElement *pElem = NULL;
 if (SUCCEEDED(m_browser->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument))) {
  pHTMLDocument->get_body(&pElem);
  long n;
  pElem->get_offsetHeight(&n);
  ShowMessage(n);
 }


пытался эксперементировать с методами ничего не получилось. нет такого оказывается. :(

Узнал что узнать свойства скрола у элементов можно функцией GetScrollBarInfo, только она работает практически со всеми компонентами кроме CppWebBrowser :(
 
Код:
SCROLLBARINFO sbi;
  ZeroMemory(&sbi, sizeof(sbi));
  sbi.cbSize=sizeof(SCROLLBARINFO);
  if(GetScrollBarInfo(CppWebBrowser1->Handle, OBJID_VSCROLL/*OBJID_HSCROLL*/, &sbi))
  {
    ShowMessage(sbi.dxyLineButton);
    ShowMessage(sbi.xyThumbTop);
    ShowMessage(sbi.xyThumbBottom);
  }


Как то же всетаки это возможно изменять и узнавать?!?!!?
Драйвера же от мышки это же умеют делать :)
246
04 июня 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: inkognitum

Код:
Узнал что узнать свойства скрола у элементов можно функцией GetScrollBarInfo, только она работает практически со всеми компонентами кроме CppWebBrowser :(
[CODE]
  SCROLLBARINFO sbi;
  ZeroMemory(&sbi, sizeof(sbi));
  sbi.cbSize=sizeof(SCROLLBARINFO);
  if(GetScrollBarInfo(CppWebBrowser1->Handle, OBJID_VSCROLL/*OBJID_HSCROLL*/, &sbi))
  {
    ShowMessage(sbi.dxyLineButton);
    ShowMessage(sbi.xyThumbTop);
    ShowMessage(sbi.xyThumbBottom);
  }


Как то же всетаки это возможно изменять и узнавать?!?!!?
Драйвера же от мышки это же умеют делать :)


Попробуй получить окно методом IWebBrowser2::get_HWND дальше GetScrollBarInfo...

520
05 июня 2007 года
inkognitum
155 / / 03.05.2006
Цитата: GIZMO
Попробуй получить окно методом IWebBrowser2::get_HWND дальше GetScrollBarInfo...



Вот нашел пример:

Код:
#include <shlguid.h>

IServiceProvider* pServiceProvider = NULL;
if (SUCCEEDED(pWebBrowser2->QueryInterface(
                    IID_IServiceProvider,
                    (void**)&pServiceProvider)))
{
    IOleWindow* pWindow = NULL;
    if (SUCCEEDED(pServiceProvider->QueryService(
                    SID_SShellBrowser,
                    IID_IOleWindow,
                    (void**)&pWindow)))
    {
        HWND hwndBrowser = NULL;
        if (SUCCEEDED(pWindow->GetWindow(&hwndBrowser)))
        {
            // hwndBrowser is the handle of TabWindowClass
        }

        pWindow->Release();
    }
 
    pServiceProvider->Release();
}



не компилится :(
ОТкрывает файл exdisp.h и ругается на строчку:

 
Код:
IWebBrowser : public IDispatch


Выдает кучу ошибок:

or] exdisp.h(337): E2238 Multiple declaration for 'IWebBrowser'
[C++ Error] exdisp.h(38): E2344 Earlier declaration of 'IWebBrowser'
[C++ Error] exdisp.h(677): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(678): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(688): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(689): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(699): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(700): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(710): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(711): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(721): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(722): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(737): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(738): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(748): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(749): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(760): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(761): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(771): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(772): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(783): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(784): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(795): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(796): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(807): E2015 Ambiguity between 'IWebBrowser' and 'Shdocvw_tlb::IWebBrowser'
[C++ Error] exdisp.h(807): E2228 Too many error or warning messages


Пытался переделать на подобии как приводил выше но нужных методов не нашел... перекопал MSDN, нашел этот пример. :(

Вообщем я в отчаине голова не соображает.. я программу не могу сдать только из-за этой проблемы :(
520
05 июня 2007 года
inkognitum
155 / / 03.05.2006
Тема закрывается!!!
Я докапался до истины!!!!!

Кому стало интересно кидаю решение!

Код:
#include "mshtml.h"
. . . . . . . .
 IHTMLDocument2 *pHTMLDocument = NULL; IHTMLElement *pElem = NULL;
 IHTMLWindow2 *pWin;
 IHTMLOptionElementFactory *el;
 if (SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument))) {
  HRESULT hr;
  hr =  pHTMLDocument->get_body(&pElem);

  IHTMLElement2 *pElement = NULL;
  hr = pElem->QueryInterface(IID_IHTMLElement2,(void**)&pElement);

    long scroll_height;
    long s;
    pElement->get_scrollHeight( &s );

    ShowMessage(s);

    CppWebBrowser1->Height = s;


немного подчистить... :)

Спасибо всем кто помогал!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог