Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi,在粘贴到Delphi应用程序时检索可见文本和隐藏超链接_Delphi_Hyperlink_Clipboard - Fatal编程技术网

Delphi,在粘贴到Delphi应用程序时检索可见文本和隐藏超链接

Delphi,在粘贴到Delphi应用程序时检索可见文本和隐藏超链接,delphi,hyperlink,clipboard,Delphi,Hyperlink,Clipboard,我该怎么做?我一直在互联网上寻找线索,但没有找到。 例如,您可以单击浏览器中的链接并复制它,然后将其粘贴到word文档中。 我使用带有一些字段的tcxGrid,并希望将此链接粘贴到字段中。该字段将向您显示文本,但如果您单击它,它将打开带有此链接的浏览器。 我可以修复后面的部分,但我不知道如何从剪贴板中提取文本和链接。 有人知道怎么做吗 我发现一篇老文章描述了如何做到这一点,但结果并不好。我得到的是中文文本而不是HTML。。请参见下面我的测试代码: function TForm2.clipBoar

我该怎么做?我一直在互联网上寻找线索,但没有找到。 例如,您可以单击浏览器中的链接并复制它,然后将其粘贴到word文档中。 我使用带有一些字段的tcxGrid,并希望将此链接粘贴到字段中。该字段将向您显示文本,但如果您单击它,它将打开带有此链接的浏览器。 我可以修复后面的部分,但我不知道如何从剪贴板中提取文本和链接。 有人知道怎么做吗

我发现一篇老文章描述了如何做到这一点,但结果并不好。我得到的是中文文本而不是HTML。。请参见下面我的测试代码:

function TForm2.clipBoardAsHTML: string;
var
  CF_HTML: UINT;
  CFSTR_INETURL: UINT;
  URL: THandle;
  HTML: THandle;
  Ptr: PChar;
begin
  CF_HTML := RegisterClipboardFormat('HTML Format');
  CFSTR_INETURL := RegisterClipboardFormat('UniformResourceLocator');
  result := '';
  with Clipboard do
  begin
    Open;
    try
      HTML := GetAsHandle(CF_HTML);
      if HTML <> 0 then
      begin
        Ptr := PChar(GlobalLock(HTML));
        if Ptr <> nil then
        try
          Result := Ptr;
        finally
          GlobalUnlock(HTML);
        end;
      end;
    finally
      Close;
    end;
  end;
end;
最后我使这段代码起作用:)但如何从剪贴板获取url的主要问题仍然没有解决( 如果我遍历所有找到的格式,我只会从它们那里得到垃圾。 Firefox的格式如下所示:

49161 - DataObject
49451 - text/html
49348 - HTML Format
50225 - text/_moz_htmlcontext
50223 - text/_moz_htmlinfo
50222 - text/x-moz-url-priv
49171 - Ole Private Data

这实际上取决于复印机决定将哪种格式放在剪贴板上。它可能一次将多种格式放在剪贴板上

带有url和可选文本的超链接可以使用以下任一方式表示:

  • 包含链接URL的Shell格式(注册名称:
    'UniformResourceLocator'
    ),以及包含链接文本的格式(如果有)

  • 包含整个HTML片段的格式(注册名称:
    'HTML format'
    ),包括
    类,以及用于访问除
    CF_(UNICODE)文本
    (可使用属性检索)以外的格式数据的方法

    您需要在运行时使用Win32函数获取
    CFSTR\u INETURL
    CF\u HTML
    (使用上述名称字符串)的格式ID,然后才能将这些ID与
    HasFormat()
    GetAsHandle()
    一起使用


    您还可以使用和属性枚举剪贴板上当前可用的格式。对于
    $c00..$FFFF
    范围内的格式ID,请使用Win32函数检索最初使用
    RegisterClipboardFormat()注册的名称

    检查剪贴板中有哪些格式。使用多种浏览器进行测试。“我得到的是中文文本而不是HTML”-这通常被称为“Mojibake”,当您将8bit(ANSI/UTF-8)文本解释为16位(UCS-2/UTF-16)文本时会发生这种情况。请记住,
    PChar
    在D2009+中是
    PWideChar
    ,但是
    CF_HTML
    使用ASCII和UTF-8的混合,因此您需要使用
    PAnsiChar
    而不是
    PWideChar
    。此外,
    'URL Format'
    CFSTR_INETURL
    使用的错误名称。正确名称是
    'UniformResourceLocator'
    >相反,我尝试在delphi中查找CFSTR_INETURL和cfu HTML(我使用的是XE6)但没有。我也查看了MS文档,但找不到这些文档的价值。对不起,我在几个小时前编辑了我的问题,但中间出现了一些问题,我忘了保存我的编辑,但现在它们已经就位。我想我做了你建议的,除了注册CFSTR_INETURL。但是我现在测试了“UniformResourceLocator”,但firefox没有似乎没有使用这种格式。@Lar然后你只需要列举剪贴板上可用的格式,看看Firefox到底提供了什么。
    49161 - DataObject
    49451 - text/html
    49348 - HTML Format
    50225 - text/_moz_htmlcontext
    50223 - text/_moz_htmlinfo
    50222 - text/x-moz-url-priv
    49171 - Ole Private Data