ブラウザをスクロールさせたい、スクロール位置を取得したい
ブラウザと言っても、たくさんありますよ。
何も書いて無いので、TWebBrowserでしょう。
>何も書いて無いので、TWebBrowserでしょう。
いや,起動しているIEの画面をDelphiのコードでスクロールしたいと
いうことではないのでしょうか.
私には方法がわかりませんが.
> いや,起動しているIEの画面をDelphiのコードでスクロールしたいと
> いうことではないのでしょうか.
>
> 私には方法がわかりませんが.
複数でなければ、OLEでIEのインスタンスを取得し、documentを操作すれば出来そうです。
# DOMの知識が必要です
NNやOperaにOLEが実装されているかわかりません。
OLEで無い場合、FindWindow, FindWindowExで対象となるウィンドウを取得し、スクロールメッセージかキーダウン/アップメッセージを送信すればできそうです。
TWebBrowserであれば、DocumentプロパティをIHTMLElementインターフェースなどとして操作すればできると思いますが、TWebBrowserよりTUIWebBrowserのほうが使い勝手は良いと思います。
# DOMの知識が必要です
私はTWebBrowserをスクロールさせるために、次のような関数を使っています。
内部の処理を見てもらえれば、位置の取得もスクロール方法も分かると思います。
※usesにShDocVwとMSHTML_TLBを追加してください
Web: スクロールさせるTWebBrowser
X,Y: スクロールの増分
function WebScroll( Web: TWebBrowser; X, Y: Integer ): Boolean;
var
X0, Y0: Integer;
XMax, YMax: Integer;
WebDoc: IHTMLDocument2;
Body: OleVariant;
X1, Y1: Integer;
begin
WebDoc := Web.Document as IHTMLDocument2;
Body := OleVariant( WebDoc ).body;
Result := True;
X0 := body.ScrollLeft;
Y0 := body.ScrollTop;
XMax := body.ScrollHeight-body.ClientWidth;
YMax := body.ScrollHeight-body.ClientHeight;
X1 := X0 + X;
Y1 := Y0 + Y;
if( Y < 0 )and( body.ScrollTop <= 0 )then begin
Y1 := 0;
Result := False;
end else
if( Y > 0 )and( body.ScrollTop >= YMax )then begin
Y1 := YMax;
Result := False;
end;
if( X < 0 )and( body.ScrollLeft <= 0 )then begin
X1 := 0;
Result := False;
end else
if( X > 0 )and( body.ScrollLeft >= XMax )then begin
X1 := XMax;
Result := False;
end;
WebDoc.parentWindow.scroll( X1, Y1 );
end;
ツイート | ![]() |