我在表单上放置了一个TLinkLabel,填写了一个包含有效HTML链接的标题,并得到了一些漂亮的蓝色下划线文本。当我运行程序时,我期望它会调用Firefox(我的默认浏览器)并自动打开该链接。显然这不是情况。
帮助文件说我必须在OnLinkClick事件处理程序中编写代码。尽管没有说明如何做到这一点。它将传递一个名为 “Link” 的字符串值。我该如何说“调用默认浏览器并打开Link”?
我在表单上放置了一个TLinkLabel,填写了一个包含有效HTML链接的标题,并得到了一些漂亮的蓝色下划线文本。当我运行程序时,我期望它会调用Firefox(我的默认浏览器)并自动打开该链接。显然这不是情况。
帮助文件说我必须在OnLinkClick事件处理程序中编写代码。尽管没有说明如何做到这一点。它将传递一个名为 “Link” 的字符串值。我该如何说“调用默认浏览器并打开Link”?
procedure ShellOpen(const Url: string; const Params: string = '');
begin
ShellAPI.ShellExecute(0, 'Open', PChar(Url), PChar(Params), nil, SW_SHOWNORMAL);
end;
在你的代码中,你应该调用这个函数
procedure TForm1.LinkLabelClick(Sender: TObject);
begin
ShellOpen(LinkLabel.Caption);
end;
Link
参数的OnLinkClick事件,该参数包含HTML标记的标题中的href地址。 - TupelTLinkLabel
提供了一个看起来像链接的标签。作为程序员,你需要让它的行为像一个链接,因为只有你知道在你的程序中链接应该如何表现。你希望标签自动使用标签中的URL打开用户默认的Web浏览器,但这并不是链接唯一的功能。例如:
有些程序尝试提供在新窗口中打开链接或重用旧窗口之间的选择。你不能实现这个功能而不知道使用的浏览器。你的程序可能会给用户提供一个选择,忽略默认浏览器设置,总是使用特定的浏览器。要做到这一点,你的UI控件不能对程序应该做什么做出太多的假设。
我猜你是在指Delphi中带有的TLinkLabel
控件。(我的版本没有这样的组件。)我想象Delphi控件的目的是模仿.Net类库中的控件。它可以容纳多个链接,每个链接可以执行不同的操作。
如果你想要一个总是执行shell默认操作的控件,请考虑使用另一个TLinkLabel
;Alexander Bach的控件正是你所期望的。它来自Delphi 3,但在所有后续版本中,包括Delphi 2009,都应该能够正常工作。如果你查看代码,你会看到它是如何工作的。它只是调用ShellExecute
,正如Cesar的答案所示。
哈哈,真有趣。所以,我们不再将crHandPoint设置为光标,也不再使用彩色和下划线字体,也不再将OnClick事件填充到标准的TLabel中,而是使用一个知道链接标签的组件,我只需要提供相同的On(Link)Click事件:)
它唯一好的地方就是使嵌入某些文本中的链接更容易,并且它使用系统样式的链接...
p.s.:你真的必须将Some text with <a href="some URL">link</a>
放入Caption
中,并将OnLinkClick
设置为ShellExecute
...
这对我很有效。
Link
属性,其中包含href地址。 - Tupel