3

次を使用してGoogleWebページを開くと、次のようになります。

WebBrowser1.Navigate('http://www.google.com.au/advanced_search?hl=en');

編集ボックスにカーソルを置いて開きます。
だから私が使うとき:

WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,vaIn, vaOut);

カーソルがある場所のみをコピーします。私がコピーしたいのは、Webページ全体ではありません。私のコードは:

procedure Pause()
begin
//code to pause until page loads.
end;

procedure TForm2.Button22Click(Sender: TObject);
var s:String;
    vaIn, vaOut: OleVariant;
begin
    s:='http://www.google.com.au/advanced_search?hl=en';
    WebBrowser1.Navigate(s);
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
      begin
          Pause(1000);
      end;
//------->I need to put code here so the SELECTALL line of code works.<----------
//------->So the cursor isn't in to editbox but as if it has clicked  <---------- 
//------->the webpage                                                 <----------
    WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,vaIn, vaOut);
end;

Webページ全体を選択するにはどうすればよいですか?

4

2 に答える 2

4

すべてを選択する前に、体に焦点を合わせてみてください。

((WebBrowser1.Document as IHTMLDocument2).body as IHTMLElement2).focus();
WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);

document.body.innerTextそうは言っても、あなたのように選択/コピーをシミュレートするのではなく、テキストを取得するために使用する方が良いアプローチです。

于 2012-09-20T12:44:07.783 に答える
1

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/eef2f809-cadf-44a3-956e-e75925a4b85e は、コピーする前にすべてを選択する明示的な方法を提案しています。この方法は、ページにフレームがない場合にのみ直接機能します(Google AdvancedにはIFRAMEがあり、IHTMLBodyElement.CreateTextRangeは失敗します)

ただし、そのような遅延バインディングコードは、XE2 / Win7x64/IE9で機能します。

procedure TForm2.btn2Click(Sender: TObject);
var HTML_Doc, oRange: OleVariant;
begin
  HTML_Doc := WebBrowser1.Document;
  oRange := HTML_Doc.body.createTextRange;
  oRange.select();

  WB_Copy(webbrowser1);
end;

WBCopyはWBFunksユニットhttp://codingrus.ru/readarticle.php?article_id=721から取得され、OLECMDID_COPY、OLECMDEXECOPT_DODEFAULTパラメーターを使用したExecWB呼び出しに要約されます。

于 2012-09-20T12:10:46.363 に答える