簡體   English   中英

在Delphi中實現'標簽面板'控件?

[英]Implementing a 'tag panel' control in Delphi?

請看一下這個截圖

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

我認為這些是'標簽面板'的主要特征:

1)面板上的每個標簽都是獨立控件,可以單擊

2)當沒有足夠的空間顯示當前行中的下一個標記時自動換行。

3)每個標簽的圓角矩形邊框是一個很好的功能。

我想在Delphi中實現類似的功能,是否有現成的控件來執行此操作? 如果沒有,實施這種控制的最佳方法是什么?

謝謝。

當您使用最近的Delphi版本時,請使用TFlowPanel和一些適當的標記控件。 一個簡單的TButton或TLinkLabel就可以做到這一點。

每個可點擊標簽不一定必須是它自己的控件。 它只需要是一個可以檢測到被點擊的區域。

假設您將每個區域表示為Windows區域 您可以根據TCanvas.TextExtent函數的文本確定每個文本的寬度。 然后使用CreateRectRgn函數創建一個區域。 對於圓角,請嘗試使用CreateRoundRectRgn 您可以使用PtInRegion函數測試每個區域中的鼠標事件。 您可以使用FrameRgn在它們周圍繪制邊框。 最后一個障礙是在屏幕上繪制它們以便它們都適合。 您正在創建區域並且知道它們的寬度,因此將標記分配給行直到用完空間,然后開始下一行。

在Delphi 7中有兩種可能的自定義對齊解決方案。您可以通過從TCustomPanel派生並覆蓋AlignControls()方法來創建自己的流程板,也可以將對齊設置為alCustom並處理OnAlignPosition事件。

我想我會選擇TCustomPanel衍生版本。 Delphi 2007形式的TFlowPanel使用了這個選項 - 但我必須承認,我從來沒有嘗試過我的自我......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM