如何在Delphi中使TLinkLabel工作?

时间:2009-02-12 16:55:07

标签: delphi linklabel

我在表单上放了一个TLinkLabel,用一个包含有效HTML链接的标题填充它,并得到一些漂亮的蓝色下划线文本。当我运行程序时,我希望它调用Firefox(我的默认浏览器)并自动打开链接。显然情况并非如此。

帮助文件说我必须在OnLinkClick事件处理程序中对此进行编码。但是,它没有说明如何做到这一点。它将传入一个名为“Link”的字符串值。我怎么说“调用默认浏览器并让它打开链接”?

6 个答案:

答案 0 :(得分:19)

您可以调用ShellExecute。 我为通用调用编写了这个方法,并且应该适用于你的情况。

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;

答案 1 :(得分:6)

TLinkLabel提供看起来像链接的标签。作为程序员,你的工作就是表现为一个链接,因为只有你才能知道哪些链接应该像你的程序一样。您希望标签使用标签中的URL自动打开用户的默认Web浏览器,但这不是链接唯一的功能。例如:

  • Internet Explorer不是我的默认浏览器,但是当我点击Internet Explorer中的链接时,我不希望链接页面在Firefox中打开。
  • 当我点击帮助程序中的链接时,我希望链接的主题出现在帮助程序中,而不是任何Web浏览器中。
  • Eclipse中的首选项页面非常复杂。一个页面上的设置有时与另一个页面上的设置有关。这些页面上有链接将用户直接带到相关页面。在这种情况下没有URL和HTML,但它们仍然是带有下划线文本的标签。

有些程序尝试在新窗口中打开链接与重新使用旧窗口之间进行选择。如果不知道正在使用哪个浏览器,则无法实现该功能。您的程序可能会为用户提供忽略默认浏览器设置的选择,并始终使用特定的浏览器设置。要做到这一点,你的UI控件不能对程序应该做什么做太多假设。

我猜你指的是Delphi附带的TLinkLabel控件。 (我的版本没有这样的组件。)我想Delphi控件是为了模仿the one in the .Net class library。它可以容纳多个链接,每个链接可以做一些不同的事情。

如果您希望控件始终执行shell对URL的默认操作,请考虑使用其他TLinkLabel; the one by Alexander Bach完全符合您的预期。它来自Delphi 3,但它应该在所有后续版本中都不会被修改,包括Delphi 2009.如果你查看代码,你会看到它是如何工作的。它只需调用ShellExecuteCesar's answer演示。

答案 2 :(得分:3)

我在使用delphi 2010附带的TLinkLabel时遇到各种各样的问题。 a)控件不会呈现为超链接,而是呈现为表单上的简单标签文本。 b)即使我设置了Cursor属性,光标也不会改变为指出这是一个链接。 c) OnLinkClick事件根本不会触发。 我正在开发Windows 7。

所以,就我而言,TLinkLabel确实没有,因为它应该没用。 ShellExecute是唯一的解决方案,必须放在OnClick事件中。

答案 3 :(得分:1)

我使用名为TInternetLabel的控件。它完全符合您的要求:点击它会打开浏览器,因此您不必将代码放入OnClick事件中。

答案 4 :(得分:1)

大笑,这很有趣。因此,不是将crHandPoint设置为光标,彩色和带下划线的字体并将OnClick事件填充到标准TLabel,而是我们拥有了解链接标记的组件,而且我需要提供相同的On(Link)Click事件:))

唯一有益的是,它更容易将链接嵌入到某些文本中,并且它使用链接的系统风格...

p.s。:实际上你必须将Some text with <a href="some URL">link</a>放入Caption并将OnLinkClick设置为ShellExecute ...

答案 5 :(得分:1)

我试过这个解决方案,但它在Delphi XE4中仍然存在问题,可能是因为ShellOpen不理解Caption中的HTML代码。 对我有用的是Cesar Romero(基本代码),Adam Feistner(标题中的HTML代码)和旧解决方案的组合:


  • 将网址放在HINT字段中。
  • 更改行: ShellOpen(LinkLabel.Caption); 至 的 ShellOpen(LinkLabel.Hint);

这对我有用。