Delphi,在粘贴到Delphi应用程序时检索可见文本和隐藏超链接
我该怎么做?我一直在互联网上寻找线索,但没有找到。 例如,您可以单击浏览器中的链接并复制它,然后将其粘贴到word文档中。 我使用带有一些字段的tcxGrid,并希望将此链接粘贴到字段中。该字段将向您显示文本,但如果您单击它,它将打开带有此链接的浏览器。 我可以修复后面的部分,但我不知道如何从剪贴板中提取文本和链接。 有人知道怎么做吗 我发现一篇老文章描述了如何做到这一点,但结果并不好。我得到的是中文文本而不是HTML。。请参见下面我的测试代码:Delphi,在粘贴到Delphi应用程序时检索可见文本和隐藏超链接,delphi,hyperlink,clipboard,Delphi,Hyperlink,Clipboard,我该怎么做?我一直在互联网上寻找线索,但没有找到。 例如,您可以单击浏览器中的链接并复制它,然后将其粘贴到word文档中。 我使用带有一些字段的tcxGrid,并希望将此链接粘贴到字段中。该字段将向您显示文本,但如果您单击它,它将打开带有此链接的浏览器。 我可以修复后面的部分,但我不知道如何从剪贴板中提取文本和链接。 有人知道怎么做吗 我发现一篇老文章描述了如何做到这一点,但结果并不好。我得到的是中文文本而不是HTML。。请参见下面我的测试代码: function TForm2.clipBoar
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'
类,以及用于访问除
(可使用属性检索)以外的格式数据的方法 您需要在运行时使用Win32函数获取CF_(UNICODE)文本
和CFSTR\u INETURL
(使用上述名称字符串)的格式ID,然后才能将这些ID与CF\u HTML
和HasFormat()
一起使用GetAsHandle()
您还可以使用和属性枚举剪贴板上当前可用的格式。对于
范围内的格式ID,请使用Win32函数检索最初使用$c00..$FFFF
检查剪贴板中有哪些格式。使用多种浏览器进行测试。“我得到的是中文文本而不是HTML”-这通常被称为“Mojibake”,当您将8bit(ANSI/UTF-8)文本解释为16位(UCS-2/UTF-16)文本时会发生这种情况。请记住,RegisterClipboardFormat()注册的名称
在D2009+中是PChar
,但是PWideChar
使用ASCII和UTF-8的混合,因此您需要使用CF_HTML
而不是PAnsiChar
。此外,PWideChar
是'URL Format'
使用的错误名称。正确名称是CFSTR_INETURL
>相反,我尝试在delphi中查找CFSTR_INETURL和cfu HTML(我使用的是XE6)但没有。我也查看了MS文档,但找不到这些文档的价值。对不起,我在几个小时前编辑了我的问题,但中间出现了一些问题,我忘了保存我的编辑,但现在它们已经就位。我想我做了你建议的,除了注册CFSTR_INETURL。但是我现在测试了“UniformResourceLocator”,但firefox没有似乎没有使用这种格式。@Lar然后你只需要列举剪贴板上可用的格式,看看Firefox到底提供了什么。'UniformResourceLocator'
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