TWebBrowserにWindowsメッセージを送るには

解決


ぺんぎん  2005-01-11 04:57:29  No: 12635

ページトップと
ページ末端を表示しようと思い
TWebBrowserのスクロールバーのコマンドがわからないので
HomeやEndキーで同じことができると思いましたがキーを受け付けてくれません
PageDownでコード書きましたが Memoは動作しますがTWebBrowserは動作しません
TWebBrowser.HWNDの説明に Web ブラウザの Window ハンドルへのアクセスを提供します。 
とあるので
   SendMessage(WebBrowser1.HWND, WM_KEYDOWN  ,VK_END , 0);
を送るとエラーで落ちます。

procedure TForm1.Button1Click(Sender: TObject);
  var s : string;
begin
  s := 'c:\BOOTLOG.TXT';
  WebBrowser1.Navigate(s);
  Memo1.Lines.LoadFromFile(s);
  Memo1.ScrollBars := ssBoth;
end;

procedure TForm1.Button2Click(Sender: TObject);
  var Msg : TMessage;
begin
  msg.WParam := VK_NEXT; // PageDown
  msg.LParam := 0;
  WebBrowser1.Perform(WM_KEYDOWN,Msg.WParam,Msg.LParam);
  Memo1.Perform(WM_KEYDOWN ,Msg.WParam,Msg.LParam);
end;

どうやったらTWebBrowserの画面をコードでスクロールできるのでしょうか?


ぺんぎん  2005-01-11 05:23:30  No: 12636

ハンドルの数字を確認しようと
  Caption := InttoStr(WebBrowser1.HWND);
でアクセスするだけでエラー起こりました
謎です。


ぺんぎん  2005-01-11 05:38:55  No: 12637

別アプリからハンドルとってClassName[Internet Explorer_Server]
エディットボックスに入力したらTWebBrowserにメッセージおくれ
スクロールできました。
SendMessage(StrToInt(Edit1.Text), WM_KEYDOWN  ,VK_END , 0);

TWebBrowserを使っているアプリ自身から
TWebBrowserのハンドルを取る方法を教えてください


Mr.XRAY  URL  2005-01-11 05:49:23  No: 12638

最初の質問のスクロールということであれば,この掲示板の
koma2さんの04-03-18 15:15の発言が参考になりませんか.

TWebBrowserで検索すればでてくると思いますが...


ぺんぎん  2005-01-11 08:53:32  No: 12639

記載してあるところがみつからないので
とりあえず表示しているときにボタンでスクロールしたいだけ+
他の人が使うことはないので
TWebBrowserに上に他のWindowがのっていないことを前提に下記ですませることにしました

  var
     Pt : TPoint;
begin
     Pt := WebBrowser1.ClientRect.TopLeft;
     Pt := WebBrowser1.ClientToScreen(Pt);
     SendMessage(WindowFromPoint(Pt), WM_KEYDOWN  ,VK_END , 0);
end;


Mr.XRAY  URL  2005-01-11 09:17:29  No: 12640

>記載してあるところがみつからないので

あれまっ,ゴメンなさい.今TWebBrowserで検索したらでないですね.
で,Koma2で検索したら見つかりました.既に解決済みということですが,
参考まで,

https://www.petitmonte.com/bbs/answers?question_id=1451


ぺんぎん  2005-01-11 21:38:24  No: 12641

こっちだとTOleControl(WebBrowser1).Visible := Falseでも反応しました♪

function GetWebBrowserHandle(Web1 : TWebBrowser) : hwnd;
// 0  ロードされていない。
// それ以外たぶん WebBrowserHandle
 var
     Pt : TPoint;
     h : hwnd;
begin
  Pt := Point(0,0);
  h := ChildWindowFromPoint(Web1.Handle,Pt);
  h := ChildWindowFromPoint(h,Pt);
  if (Web1.Handle = h ) then Result := 0
   else Result := h;
end;

procedure TForm1.Button5Click(Sender: TObject);
 var
     h : hwnd;
begin
  h := GetWebBrowserHandle(WebBrowser1);
  if (h>0) then
     SendMessage(h, WM_KEYDOWN  ,VK_END , 0);
end;

>参考まで,
https://www.petitmonte.com/bbs/answers?question_id=1451
探してくれてありがとうございます。
そちらの方も試してみようと思います


ぺんぎん  2005-01-11 23:10:05  No: 12642

教えていただいたコードで初期位置設定できました♪
ありがとうございました。

uses 
     SHDocVw,MSHTML;

  OleVariant(WebBrowser1.Document as IHTMLDocument2).body.ScrollTop := 1020;
  OleVariant(WebBrowser2.Document as IHTMLDocument2).body.ScrollTop := 620;
  OleVariant(WebBrowser3.Document as IHTMLDocument2).body.ScrollTop := 400;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加