【问题标题】:TWebBrowser - Detecting the tag under caretTWebBrowser - 检测插入符号下的标签
【发布时间】:2017-02-08 10:28:41
【问题描述】:

我想检测哪个 HTML 标记(更准确地说是超链接)是插入符号。

procedure THTMLEdit.ShowTag;     
var
  CursorPos: TPoint;
  HtmlElement: IHTMLElement;
  iHTMLDoc: IHtmlDocument2;
begin
 if Supports(wbBrowser.Document, IHtmlDocument2, iHTMLDoc) then
  begin
    if GetcaretPos(CursorPos) then
    begin
      CursorPos := wbBrowser.screentoclient(CursorPos);
      HtmlElement := iHTMLDoc.ElementFromPoint(CursorPos.X, CursorPos.Y);  // I NEED KEYBOARD CARET HERE, NOT MOUSE CURSOR
      if HtmlElement <> NIL
      then label1.Caption:= HtmlElement.tagName;
    end;
  end;
end;

注意事项:
TWebBrowser 处于设计模式 ( DesignMode := 'On' )。
TWebBrowser 在设计时采用自己的形式,但在运行时以另一种形式(在面板中)重新设置父级。

更新:
我需要的是 IHTMLTxtRange (我认为)。当我双击链接/单词时,它会起作用。但是当没有选择文本/链接时,我不知道如何在插入符号下获取标签。

【问题讨论】:

  • 你可以看看我对这个 q:stackoverflow.com/questions/25527367/… 的回答,尤其是TForm1.AnEvent
  • 这样模糊的信息很难帮助你。你想要光标下的标签吗?但是你打电话给GetCaretPos。你想要光标还是插入符号?在您的其他问题中,您显然只对&lt;a&gt; 链接感兴趣。你能放慢速度,花点时间,告诉我们你实际上在做什么。用一系列不精确和不清楚的问题向我们发送垃圾邮件是没有建设性的,并且表明阻碍您的思维混乱。
  • [通常]当您单击编辑器时,光标和插入符号会在同一个位置。但你是对的,我是模棱两可的。我想要插入符号下的标签。
  • @DarkPresidentOfAmerica,您可以使用 MartynA 的回答处理 onmouseup 事件。然后类似:rg:=Doc.selection.createRange; rg.collapse; el:=rg.parentElement;
  • 在什么情况下你调用 ShowTag?

标签: html delphi internet-explorer delphi-xe7 twebbrowser


【解决方案1】:

GetcaretPos(CursorPos) 返回客户端(相对)坐标(见GetCaretPos function

删除 wbBrowser.screentoclient(CursorPos) 它应该可以正常工作。我已经用你上面的代码示例进行了测试

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2020-02-17
  • 2015-01-16
  • 2020-06-01
  • 2013-03-30
  • 2018-07-03
相关资源
最近更新 更多