1

我试图在浏览器中获取插入符号闪烁的 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);
4

1 回答 1

3

插入符号并不像鼠标光标位置那么简单:每个窗口都可以自由地创建和显示它自己的插入符号,只要它想要它。这是MSDN 上的 Using Carets 链接。您通常希望一个窗口仅在具有键盘焦点的情况下才显示插入符号,但我认为即使没有键盘焦点,也不会阻止窗口显示插入符号。

由于正常行为是仅在有键盘焦点时才显示插入符号,因此您可以使用以下命令进行检查:GetFocus。但是您可能会发现 TWebBrowser 本身占据了焦点,我怀疑每个 HTML 元素都有一个窗口句柄。

我假设你真正想要的是活动元素。你可以使用:

(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;
于 2011-03-09T14:15:57.017 回答