网页浏览器上的插入位置

时间:2011-03-09 10:25:07

标签: delphi caret

我正在尝试在webbrowser中获取htmlinputtextelement的id,其中插入符号正在闪烁。所以当我按TAB时它会改变。

如何在delphi中执行此操作?

你知道什么时候你去一个网站,并有多个inputtexlements。您可以按Tab键滚动浏览它们。完成框1,TAB后,填写框2,TAB,框3,TAB,直到您在网站上填写完表格。我想做这个。通过了解当前插入符所在的inputtexlement的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);

1 个答案:

答案 0 :(得分:3)

Caret并不像鼠标光标位置那么简单:每个Window都可以自由创建并显示它自己的插入符号,无论它在哪里。这是一个Using Carets link on MSDN。你通常希望一个窗口只显示一个Caret,如果它有键盘焦点,但我认为即使它没有键盘焦点也没有任何东西阻止显示Caret。

由于正常行为仅在键盘焦点处显示插入符号,因此您可以使用: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;