TWebBrowser を使って HTML の描画イメージを取得する
|
WebBrowser1.ControlInterface.Width と 同.Height を保存し、ページのサイズにして OleDraw の後で復元したところ、イメージが取得できました。
IWebBrowser の Width, Height は表示しているコントロールの Width/Height にイコールであるため、TWebBrowser(TOleContainer)の大きさが可変であることが必要なのがちょっと困者ですが、なんとかなった、、、ことにします。
web: TWebBrowser;
var
bmp: TBitmap;
body: OleVariant;
w, h: Integer;
begin
body := (Web.Document as IHTMLDocument2).Body;
bmp := TBitmap.Create;
try
// 軽くマージンをつけておかないとスクロールバーがついちゃいます。
bmp.Width := body.scrollWidth + 16;
bmp.Height := body.scrollHeight + 16;
(* ここで WindowLock(Web.Handle) すべきでしょうか?
CPU などの性能によってはチラつきそうです。 *)
// 現在値を保存してリサイズします。
w := Web.ControllInterface.Width;
h := Web.ControllInterface.Height;
Web.ControllInterface.Width := bmp.Width;
Web.ControllInterface.Height := bmp.Height;
// 描画します。
OleDraw(Web.ControllInterface, DVASPECT_DOCPRINT, bmp.Canvas.Handle,
Rect(0, 0, bmp.Width, bmp.Height));
// 元の大きさに戻します。
Web.ControllInterface.Width := w;
Web.ControllInterface.Height := h;
(* ここで WindowLock() してるなら戻す *)
(* ここでいろいろ bmp を使って遊べます *)
finally
bmp.Free;
end;
end;
一応、上記のようなかんじなのですが、dislable なスクロールバーがつくものの、全体をイメージにできました。scrollbar の幅と高さを GetSystemMetrics などで手にいれてカットすれば okay っぽいのですが、常に scrollbar がついているか…など検証が必要そうです。
# IWebBrowser 関連を操作して、強制的に消せましたっけ? |
|