tWebBrowserが完全に表示したタイミングを知るには?

解決


がふ  2007-05-29 13:18:47  No: 26307

WebBrowserを使ったツールを現在製作してまして
画面に写った状態を見て自動的にツールが処理をするという物です。

問題部分は、ページを読み込み中に完了したタイミングで画面内の文字列にあるかないかチェックするプログラムを製作してまして
色々調べてみた結果onNavigateComplete2を使うと良い事をこのサイトで知りました。
ただ、onNavigateComplete2は表示を完全に終わってない状態で帰ってきます。
その状態の時に文字検索である

procedure WBLocateHighlight(WB: TWebBrowser; Text: string) ;
const
   prefix = '<span style="color:white; background-color: blue;">';
   suffix = '</span>';
var
   tr: IHTMLTxtRange;
begin
   if Assigned(WB.Document) then
   begin
     tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
     while tr.findText(Text, 1, 0) do
     begin
       tr.pasteHTML(prefix + tr.htmlText + suffix) ;
       tr.scrollIntoView(True) ;
     end;
   end;
end;
を使うのですが、
wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
の部分がエラーを返してきます。
おそらく表示が完了してないと思われます。
時間を待てば良いかもしれないですが、回線が遅い場合はエラーが出てしまいます。

良い回避策はありませんでしょうか?
何卒宜しくお願い申し上げます。


がふ  2007-05-29 13:20:36  No: 26308

使用しているDelphiは無償で公開されてますTurbo  Delphiです。


待つわ  2007-05-29 21:39:45  No: 26309

byあみん

  ……
  たとえあなたが  振り向いてくれなくても
  待つわ(待つわ)  いつまでも待つわ
  DocumentCompleteのイベントが来る時まで♪


がふ  2007-05-30 00:05:42  No: 26310

待つわさんありがとうございます。
通常のDocumentCompleteのみではタイミングが表示しきってないのに来るので困ってました。
そこで↓
http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_events.htm#OnDocumentComplete
このサイトのソースを使ってみた所無事に出来ましたが問題がありまして

WebBrowser.Refresh;
をした場合、完了したときにDocumentCompleteで帰ってきません。
この場合どうすればいいでしょうか?


VBA研究員  2007-06-01 08:15:22  No: 26311

こんにちは。
プロパティにBUSYがありますよね、この内容を使って下さい。


がふ  2007-06-05 00:34:38  No: 26312

アドバイスありがとうございます。
DocumentCompleteが来た時に

var
  currentBrowser: IWebBrowser;
  topBrowser: IWebBrowser;
begin
  currentBrowser := pDisp as IWebBrowser;
  topBrowser := (webBrowser as TWebBrowser).DefaultInterface;
  if currentBrowser = topBrowser then begin

とする事で解決しました。
ありがとうございました。


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

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






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