在Delphi中实现'标签面板'控件?

Edw*_*Yip 5 delphi tagging

请看一下这个截图

替代文字http://www.maclife.com/files/u18/Yep3-big.jpg

我认为这些是'标签面板'的主要特征:

1)面板上的每个标签都是独立控件,可以单击

2)当没有足够的空间显示当前行中的下一个标记时自动换行.

3)每个标签的圆角矩形边框是一个很好的功能.

我想在Delphi中实现类似的功能,是否有现成的控件来执行此操作?如果没有,实施这种控制的最佳方法是什么?

谢谢.

Uwe*_*abe 7

当您使用最近的Delphi版本时,请使用TFlowPanel和一些适当的标记控件.一个简单的TButton或TLinkLabel就可以做到这一点.


Rob*_*edy 3

每个可点击标签不一定必须是其自己的控件。它只需是您可以检测到被单击的区域即可。

假设您将每个区域表示为一个Windows 区域。您可以使用该函数根据其文本计算出每个文本的宽度TCanvas.TextExtent。然后创建一个具有类似 函数的区域CreateRectRgn。对于圆角,请尝试CreateRoundRectRgn改为。您可以使用该函数测试每个区域的鼠标事件PtInRegion。您可以使用 绘制它们周围的边框FrameRgn。最后一个障碍是将它们绘制在屏幕上,以便它们全部适合。您正在创建区域并且知道它们的宽度,因此将标记分配给一行,直到空间不足,然后开始下一行。