[英]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.