procedure tb_captureClick(Sender: TObject);
var
ViewObject: IViewObject;
sourceDrawRect: TRect;
begin
wb_Explorer.width := wb_Explorer.DefaultInterface.Width; <-- 여기와
wb_Explorer.Height := wb_Explorer.DefaultInterface.Height; <-- 여기의 값이 문제..
image1.Width := wb_Explorer.width;
image1.Height := wb_Explorer.Height;
if wb_explorer.Document <> nil then
try
wb_explorer.Document.QueryInterface(IViewObject, ViewObject);
if ViewObject <> nil then
try
sourceDrawRect := Rect(0, 0, Image1.Width, Image1.Height);
ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,image1.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
finally
ViewObject._Release;
end;
except
end;
end;
위에 표시한 곳이 문젭니다.
웹 브라우져 컨트롤을 이용해서 페이지를 열었을때..
해당하는 페이지의 컨텐츠가 많을 경우 우측에 스크롤바가 생깁니다.
그런데 image1.width 와 height를 제대로 설정해 주지 않으면 image1의 크기에 맟춰서 이미지를 축소해서 캡쳐가 되어 버립니다.
그래서..브라우져의 스크롤로 인해 감춰진 부분을 모두 포함하는 전체 크기를
알아내서 image1의 크기를 설정해 준 다음에
ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,image1.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
이부분을 실행 시켜 줘야 하는데 이 부분에서 막히고 있습니다.
도움 부탁드립니다.
아래서 도움을 주셨던분 programming internetexplorer이란 책을 교보문고 가서 1시간이나 뒤졌는데 결국 못 찾았습니다.ㅠㅠ
그럼..
정석이 아닌지도..ㅡㅡ; 혹시 올바른 방법을 아시는 분 리플을..^^;
웹 브라우져 컨트롤을 스크롤 박스 안에 배치했습니다.
그리고 DocumentComplete 이벤트에서 아래와 같이 ...
그럼..
procedure Tfrm.FormCreate(Sender: TObject);
begin
webBrowser.Top := 0;
webBrowser.Left := 0;
webBrowser.Height := ScrollBox2.ClientHeight;
webBrowser.Width := ScrollBox2.ClientWidth;
end;
procedure Tfrm.wb_explorerDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
docHeight, i : integer;
begin
if webBrowser.OleObject.Document.Frames.Length < 1 then
begin
webBrowser.Height := Integer(webBrowser.OleObject.Document.Body.ScrollHeight);
end else
begin
docHeight := 0;
for i := 0 to webBrowser.OleObject.Document.Frames.Length - 1 do
begin
docHeight := docHeight + integer(webBrowser.OleObject.Document.Frames.Item(i).Document.Body.ScrollHeight);
end;
webBrowser.Height := docHeight;
end;
if webBrowser.Height < ScrollBox2.ClientHeight then
begin
webBrowser.Height := ScrollBox2.ClientHeight;
end;
end;