2012-09-20 2 views
3

나는 사용하여 Google 웹 페이지를 열 때.
그래서 내가 사용하는 경우 : 커서가웹 브라우저와 OLECMDID_SELECTALL

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

그것을 단지 복사합니다. 전체 웹 페이지가 아닙니다. 복사하고 싶은 내용입니다. 내 코드 :

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; 

전체 웹 페이지를 선택하는 방법은 무엇입니까?

+0

TWebBrowser.Document.Copy를 사용할 수 있습니까? http://docwiki.embarcadero.com/Libraries/en/SHDocVw.TWebBrowser.Document http://msdn.microsoft.com/en-us/library/aa752116.aspx http://msdn.microsoft.com /en-us/library/aa752127.aspx –

+0

또한 http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/7d19aa5c-5288-4176-8d3a-04ef44387c52 HTTP 보면 : // 사회. msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/eef2f809-cadf-44a3-956e-e75925a4b85e –

+2

당신이 * 뭘하려고 정말 *인가? 그 페이지의 내용을 복사하거나 무엇을? ... – kobik

답변

4

시도 : 그와

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

는 더 나은 방법이 당신처럼 복사/대신 선택을 시뮬레이션의 텍스트를 잡아 document.body.innerText을 사용하는 것입니다 말했다.

+0

Kobik, 당신은 천재입니다. 그리고 또한 우스운 이야기. 감사. –

+0

예, 알림을 보내 주셔서 감사합니다. 나는 위쪽 화살표를 눌렀다. 다시 한번 감사드립니다. 나는 명성 랭킹에서 11 점 밖에 얻지 못해 나의 최대 득표가 계산되지 않기 때문에 투표를하기 전에 15 점이 필요하다. –

+0

@ 제임스, 이제 할 수 있습니다 ;-) – TLama

1

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/eef2f809-cadf-44a3-956e-e75925a4b85e 은 복사하기 전에 모두 선택하는 명시적인 방법을 제안한다. 페이지에는 프레임 (구글 고급가 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 호출로 끝납니다. 모두를 선택하기 전에 몸을 중심으로

+0

그래서 대답은 무엇입니까? – TLama

+0

안녕하세요 Arioch, 방금 시도한 코드를 보내 주셔서 감사 드리며 작동합니다. 그러나 그것은 페이지의 모든 내용을 복사합니다. 화면의 코드 내용이 아닌 텍스트를 복사하기 만하면됩니다. –

+0

Hi TLama, 대답은 kobik에 의해 주어졌습니다. 어느 것이 : ((WebBrowser1.Document as IHTMLDocument2) .body IHTMLElement2) .focus(); WebBrowser1.ExecWB (OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut); –