var
Doc: IHTMLDocument2;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
ShowMessage(VarAsType(Doc.body.offsetHeight, varString));
CppWebBrouwser длина страницы?
Подскажите пожалуйста как?
Как можно узнать в пикселях длину всей HTML страницы загруженной в CppWebBrouwser?
Если это невозможно, то как хотябы определить влазиет ли страница в пределах длины CppWebBrowser или же есть Scroll?
Пытался узнавать методами - GetPosScroll, GetInfoScroll функции возвращают всегда 0.
Буду очень благодарен!
Я бы делал что-то вроде этого (Delphi, но важен сам принцип):
Код:
Хотя это не совсем то, но близко.
Искал на МСДН, вроде подходящего свойства я не нашел, но путь для поисков я тебе указал. Смотри также
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
Цитата: Tokolist
GetScrollInfo и GetScrollPos не срабатывают, как я понимаю, через то, что скроллбары появляются не у окна, а у элемента страницы body.
Я бы делал что-то вроде этого (Delphi, но важен сам принцип):
Хотя это не совсем то, но близко.
Искал на МСДН, вроде подходящего свойства я не нашел, но путь для поисков я тебе указал. Смотри также
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
Я бы делал что-то вроде этого (Delphi, но важен сам принцип):
Код:
var
Doc: IHTMLDocument2;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
ShowMessage(VarAsType(Doc.body.offsetHeight, varString));
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
Спасибо большое, буду искать.
Код:
#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);
}
. . . . .
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);
}
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);
}
Как то же всетаки это возможно изменять и узнавать?!?!!?
Драйвера же от мышки это же умеют делать :)
Цитата: 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);
}
[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...
Цитата: 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();
}
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, нашел этот пример. :(
Вообщем я в отчаине голова не соображает.. я программу не могу сдать только из-за этой проблемы :(
Я докапался до истины!!!!!
Кому стало интересно кидаю решение!
Код:
#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;
. . . . . . . .
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;
немного подчистить... :)
Спасибо всем кто помогал!