5

请看一下这个截图

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

我认为这些是这种“标签面板”的主要特点:

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

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

3) 每个标签的圆角矩形边框是一个不错的功能。

我想在 Delphi 中实现类似的功能,是否有现有的控件可以做到这一点?如果不是,那么实施这种控制的最佳方式是什么?

谢谢你。

4

3 回答 3

7

当您使用最新的 Delphi 版本时,请使用 TFlowPanel 和一些适当的标签控件。一个简单的 TButton 或 TLinkLabel 应该可以做到这一点。

于 2009-10-12T05:53:38.147 回答
3

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

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

于 2009-10-12T05:41:21.730 回答
1

在 Delphi 7 中自定义对齐有两种可能的解决方案。您可以通过从 TCustomPanel 派生并覆盖 AlignControls( ) 方法来制作自己的流程面板,或者您可以将对齐设置为 alCustom 并处理 OnAlignPosition 事件。

我想我会选择 TCustomPanel-derivative 选项。Delphi 2007 表格中的 TFlowPanel 使用该选项 - 但我必须承认,我从未尝试过我自己......

于 2009-10-12T10:44:51.813 回答