|
WebBroswer 이미지를 그대로 TImage에 draw하려고 합니다.
Delphi에서 TWebBroswer 나 TEmbeddedWB 로는 잘 되던데..
C++Builder에서 TCppWebBrowser로는 잘 안되네요
//델파이 소스
procedure GenerateBitmapfromBrowser2(browser: iWebBrowser2; srcHeight: integer; srcWidth: integer; Image: TImage);
var
sourceDrawRect : TRect;
aViewObject : IViewObject;
begin
try
aViewObject := browser as IViewObject;
if aViewObject=nil then
Exit;
Image.Picture.Bitmap.Width:=srcWidth;
Image.Picture.Bitmap.Height:=srcHeight;
sourceDrawRect := Rect(0, 0, srcWidth, srcHeight);
OleCheck(aViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil,
Form1.Handle,
Image.Picture.Bitmap.Canvas.Handle,
@sourceDrawRect, nil, nil, 0));
except
// error handler code
end; { try }
end;
procedure TForm1.CopyBroswerImage();
begin
GenerateBitmapfromBrowser2(EmbeddedWB1.ControlInterface,EmbeddedWB1.Height, EmbeddedWB1.Width,Image1);
Image1.Repaint;
end;
//----------------------------------------------------------
//C++Builder소스
void __fastcall GenerateBitmapfromBrowser2(IWebBrowser2 *browser, int srcHeight,int srcWidth,TImage *Image)
{
IViewObject *ViewObject=(IViewObject *)browser;
TRect rc=Rect(0,0,srcWidth, srcHeight);
if(ViewObject==NULL)return;
Image->Picture->Bitmap->Width=srcWidth;
Image->Picture->Bitmap->Height=srcHeight;
OleCheck(ViewObject->Draw(DVASPECT_CONTENT, 1, NULL, NULL, Form1->Handle, Image->Picture->Bitmap->Canvas->Handle,(const _RECTL *)&rc, NULL,NULL, 0));
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
GenerateBitmapfromBrowser2(CppWebBrowser1->ControlInterface,CppWebBrowser1->Height, CppWebBrowser1->Width,Image1);
Image1->Repaint();
}
//---------------------------------------------------------------------------
두소스의 차이를 보면...
EmbeddedWB나 TWebBroswer의 ControlInterface 는 IWebBrowser2 인데
TCppWebBrowser 의 ControlInterface 는 IWebBrowser2 가 아닌 IWebBrowser2 Disp 이네요
COM에 대해서 잘 몰라서..
TCppWebBrowser 에서는 IWebBrowser2 를 어떻게 가져오죠?
|