掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WebBrowserのNavigate処理を途中で完全に止めるには (ID:40338)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
みなさん、いろいろな書き込み、ありがとうございます。 今、実行していましたら、新たな発見がありました。 確かに、単純にFreeするだけなら問題はありませんでした。 次のコードのうち、OnNavigateComplete2と、OnDocumentComplete の部分の、「Navigateが終わったら、WebBrowserにフォーカスを 当てる」という処理の部分に問題があったようです。おそらく、 このコードでしたら問題が再現するはずです。(少なくとも、今 当方では再現しました。) Freeの前に各イベントを無効にしていたので、原因を探る際、 うっかり見落としていました。みなさまにお手数をおかけしてしまい、 申し訳ありませんでした。 ただ、「Navigateが終わったら、WebBrowserにフォーカスを当てる」 という処理は、マウスのホイールを利用して快適にブラウジングを行う ためにどうしても行いたい処理なので、これを実現しつつ、IEを 立ち上がらないようにしたいのです。 当初の質問と、微妙に変わってしまいましたが、ここ最近ずっと悩んで いる問題で、ぜひ解決していきたいと考えておりますので、どうぞよろしく お願いいたします。 --------------------------------------------------------- // Usesには、ActiveXを手動で追加する必要があります。 procedure TForm1.Button1Click(Sender: TObject); begin WebBrowser.Navigate('http://syarecowa.moo.jp/'); end; procedure TForm1.Button2Click(Sender: TObject); begin // Button1を押し、Navigateされたページで出たスクリプトエラー // ダイアログを消した後に押す。 WebBrowser.Stop; WebBrowser.OnNavigateComplete2 := nil; WebBrowser.OnDocumentComplete := nil; WebBrowser.Free; end; procedure TForm1.WebBrowserNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var Rect: TRect; begin if WebBrowser.Document <> nil then begin Windows.GetClientRect(WebBrowser.Handle, Rect); (WebBrowser.Application as IOleObject).DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser, 0, WebBrowser.Handle, Rect); end; end; procedure TForm1.WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var Rect: TRect; begin if WebBrowser.Document <> nil then begin Windows.GetClientRect(WebBrowser.Handle, Rect); (WebBrowser.Application as IOleObject).DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser, 0, WebBrowser.Handle, Rect); end; end; initialization OleInitialize(nil); finalization OleUninitialize;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.