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;
の部分がエラーを返してきます。
おそらく表示が完了してないと思われます。
時間を待てば良いかもしれないですが、回線が遅い場合はエラーが出てしまいます。
良い回避策はありませんでしょうか?
何卒宜しくお願い申し上げます。
使用しているDelphiは無償で公開されてますTurbo Delphiです。
byあみん
……
たとえあなたが 振り向いてくれなくても
待つわ(待つわ) いつまでも待つわ
DocumentCompleteのイベントが来る時まで♪
待つわさんありがとうございます。
通常のDocumentCompleteのみではタイミングが表示しきってないのに来るので困ってました。
そこで↓
http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_events.htm#OnDocumentComplete
このサイトのソースを使ってみた所無事に出来ましたが問題がありまして
WebBrowser.Refresh;
をした場合、完了したときにDocumentCompleteで帰ってきません。
この場合どうすればいいでしょうか?
こんにちは。
プロパティにBUSYがありますよね、この内容を使って下さい。
アドバイスありがとうございます。
DocumentCompleteが来た時に
var
currentBrowser: IWebBrowser;
topBrowser: IWebBrowser;
begin
currentBrowser := pDisp as IWebBrowser;
topBrowser := (webBrowser as TWebBrowser).DefaultInterface;
if currentBrowser = topBrowser then begin
とする事で解決しました。
ありがとうございました。
ツイート | ![]() |