2011-03-09 31 views
1

我正在試圖在webbrowser中的插入符號閃爍時獲取htmlinputtextelement的id。所以當我按TAB時它會改變。網絡瀏覽器上的插入符號位置

我該如何在delphi中做到這一點?

你知道什麼時候進入一個網站,並有多個inputtextelements。您可以通過按TAB滾動瀏覽它們。當您完成第1盒TAB的填寫後,請填寫第2盒TAB第3盒TAB,直到您完成網站上的表格。我想做這個。通過了解當前插入符號的inputtextelement的id是什麼。

您可以使用getcursorpos獲取鼠標位置。你能以同樣的方式得到插入位置嗎?他們不給x和y的相同位置......?

procedure TForm1.Button2Click(Sender: TObject); 
var 
    MausPos: TPoint; 
    HtmlElement: IHTMLElement; 
    iHTMLDoc: IHtmlDocument2; 
    tag1:string; 
    id1:string; 
begin 
    if Supports(webbrowser1.Document, IHtmlDocument2, iHTMLDoc) then 
    begin 
    if GetcaretPos(MausPos) then 
    begin 
     MausPos := webbrowser1.screentoclient(MausPos); 
     HtmlElement := iHTMLDoc.ElementFromPoint(MausPos.X, MausPos.Y); 
+0

如果我把一個TWebBrowser窗體上,然後按TAB不會導致焦點被循環。這不會發生在你身上嗎? – 2011-03-09 11:29:47

+0

如果選擇了inputtextelement,則不需要。然後按TAB結果選擇下一個inputtextelement – dave123 2011-03-09 11:31:54

+0

對不起,我簡直不明白。也許有更多TWebBrowser知識的人可以提供幫助。 – 2011-03-09 11:44:06

回答

3

插入符號是不是鼠標光標位置一樣簡單:每個窗口都可以自由創建和顯示它自己插入符號,無論它想要它。這是Using Carets link on MSDN。你通常希望一個窗口只顯示一個插入符號,如果它有鍵盤焦點,但我不認爲有任何東西阻止窗口顯示插入符號,即使它沒有鍵盤焦點。

由於通常的行爲是隻顯示插入符號,如果有鍵盤焦點,您可以檢查使用:GetFocus。但你可能會發現TWebBrowser本身就是焦點,我懷疑每個HTML元素都有一個Window Handle。

我假設你實際上想要的是活動元素。你可以得到使用:

(TWebBrowser.Document as IHTMLDocument2).activeElement 

下面是一個使用這個屬性很短的代碼片段:

procedure TForm25.Button2Click(Sender: TObject); 
begin 
    if (W.Document as IHTMLDocument2).activeElement <> nil then 
    ShowMessage((W.Document as IHTMLDocument2).activeElement.tagName); 
end; 
+2

+1中增加了幾行代碼'TForm25'講述了堆棧溢出成癮的故事! – 2011-03-09 16:10:00

+0

@David,我剛剛花了半個小時閱讀「我沉迷於SO」的帖子... ...非常感謝。 – 2011-03-09 23:44:46

+0

我發現'TForm25'非常有趣,因爲我自己認識它。我認爲我現在在'TForm28'! – 2011-03-09 23:45:35