IEコンポーネントを使い、WEB Browserを作っています。
Sleipnirにあるようなズームの機能(HTML表示の拡大縮小(必要なのは縮小))をDelphi6 personalにて実現するにはどのような宣言や仕組みにすれば良いのでしょうか?
宜しくお願いします。
Q: How can I save a web page to a bitmap?
http://members.shaw.ca/iedelphi/webbrowser.htm#advanced11
webページをBitmapに変換して縮小拡大ではなく、Html自体の縮小表示をやりたいと思っています。
(縮小状態でwebページのリンクなども機能している状態)
要するに普通にHtmlを表示させる状態を全体的に小さくさせたいワケです。オペラの機能であるように。
その為の手法を宜しくお願い致します。
IE自体にズーム機能が無いのでIEコンポーネントを使う限り難しいのでは。
少しおかしいかもしれませんがこんな感じでしょうか。
# スクロールバーまで大きくなってしまう・・・
MSHTML_TLBをusesに追加してください。
なければtlibimpなどで取り込んでください。
procedure Zoom(wb: TWebBrowser; Value: Integer);
var
lngValue: LongInt;
Doc: IHTMLDocument2;
Body: IHTMLElement;
objStyle: Variant;
begin
///
Doc := wb.Document As IHTMLDocument2;
Body := Doc.body As IHTMLElement;
objStyle := Body.style;
objStyle.zoom := Value;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Zoom(WebBrowser1, TrackBar1.Position);
end;
>>にしのさんソース例ありがとうございます。
現在、
WebBrowser1.OleObject.Document.Body.Style.Zoom := 0.75; //0.75=75%のサイズ(数値を変えれば好きなサイズに変更可)
でブラウザの拡大と縮小が出来る事が分かりました。
その上で、Form1にあるEdit1に表示させたいwebページのURLを記入して、Form1にあるButtom1を押すと、Form2が開き、Form2にあるWebBrowser1がForm1のEdit1に記してあるURLのページを表示させると同時に縮小化させる、という動作をさせたいと思っています。
Webbrowser1にForm1のEdit1で指定したwebページを表示させるまでは問題無いのですが、いざ縮小化させる時、
Form2.WebBrowser1.Navigate(Edit1.text); //Form1Edit1のURLをwebbrowserへ
Form2.Show; //Form2を表示
Form2.WebBrowser1.OleObject.Document.Body.Style.Zoom := 0.75; //Form2のWebbrowser表示の縮小処理
とするとデバッガ例外が発生してしまいます。
Form2の記述で、
procedure TForm2.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
WebBrowser1.OleObject.Document.Body.Style.Zoom := 0.75;
end;
という感じにすれば縮小化はされるんですが、表示された時すぐに縮小化したいのです。
エラーの原因もしくは、何か良い手は無いでしょうか?
よろしくお願いします。
エラーの原因は、Documentがロードしきっていないうちに操作しているからです。
OnNavigateComplete2イベントで処理させればOKです。
訂正です。
OnDocumentCompleteイベントで処理してください。
OnNavigateComplete2イベントだと早すぎました。
お早い返信ありがとうございます。
OnDocumentCompleteイベント内で処理したらwebページ表示後すぐに縮小化されました。
でも、
WebBrowser1.OleObject.Document.Body.Style.Zoom := 0.75;
だけを処理させているせいか分かりませんが、エラーダイアログは以前出続けています。無視すれば他は何も問題無いのですが、やっぱりカッコ悪いですね。
何か足りない事があるんでしょうか?
ツイート | ![]() |