void __fastcall TForm1::Button1Click(TObject *Sender)
{
CppWebBrowser1->Navigate(WideString(Edit1->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
IViewObject2 *vObj;
IHTMLElement2 *ele2;
IHTMLElement2 *ele_5;
IHTMLDocument2 *doc2;
IHTMLElement *ele;
IHTMLElement *ele_4;
IHTMLDocument3 *doc3;
long bHeight, bWidth, height, width, height2, width2;
if(FAILED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (void **)&doc2)))
return;
if(FAILED(doc2->get_body(&ele)))
return;
if(FAILED(ele->QueryInterface(IID_IHTMLElement2, (void **)&ele2)))
return;
if(FAILED(ele2->get_scrollHeight(&bHeight)))
return;
if(FAILED(ele2->get_scrollWidth(&bWidth)))
return;
if(FAILED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument3, (void **)&doc3)))
return;
if(FAILED(doc3->get_documentElement(&ele_4)))
return;
if(FAILED(ele_4->QueryInterface(IID_IHTMLElement2, (void **)&ele_5)))
return;
if(FAILED(ele_5->get_scrollHeight(&height2)))
return;
if(FAILED(ele_5->get_scrollWidth(&width2)))
return;
width = (width2 > bWidth ? width2 : bWidth);
height = (height2 > bHeight ? height2 : bHeight);
if(FAILED(CppWebBrowser1->Document->QueryInterface(IID_IViewObject2, (void **)&vObj)))
return;
DoCapture(ele, vObj, width, height, CppWebBrowser1->Width, CppWebBrowser1->Height, 30, 30);
vObj->Release();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DoCapture(IHTMLElement *ele, IViewObject2 *vObj, int width, int height, int cwidth, int cheight, int wd, int hd)
{
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Width = width;
bmp->Height = height;
Graphics::TBitmap *bmp2 = new Graphics::TBitmap();
bmp2->Width = cwidth;
bmp2->Height = cheight;
OleVariant v;
v = "yes";
if(FAILED(ele->setAttribute(L"scroll", v, 0)))
return;
long cnt = 0;
long hcnt = 0, wcnt = 0;
long i = 0;
TRect rect = Rect(0, 0, cwidth, cheight);
VARIANT gv;
while(cnt < height)
{
for(i = 0; i < width; i += (cwidth-wd))
{
v = cnt;
ele->setAttribute(L"scrollTop", v, 0);
v = i;
ele->setAttribute(L"scrollLeft", v, 0);
OleCheck( vObj->Draw(DVASPECT_CONTENT, 1, NULL, NULL, Form1->Handle,
bmp2->Canvas->Handle, (const _RECTL *)&rect,
NULL,NULL, 0)
);
ele->getAttribute(L"scrollTop", 0, &gv);
hcnt = gv.lVal;
ele->getAttribute(L"scrollLeft", 0, &gv);
wcnt = gv.lVal;
BitBlt(bmp->Canvas->Handle, wcnt, hcnt, (cwidth-wd), (cheight-hd),
bmp2->Canvas->Handle, 0, 0, SRCCOPY);
}
cnt += (cheight-hd);
}
Image1->Picture->Bitmap->Assign(bmp);
delete bmp2;
delete bmp;
}