我有一個TLabel
與EllipsisPosition
設置爲epEndEllipsis
我需要能夠判斷文本是否被剪裁。除了計算自己顯示文本所需的面積並將其與標籤的實際尺寸進行比較之外,是否有人想出了一種更簡單/更優雅的方式來實現此目的?如何以編程方式最好地判斷TLabel的標題是否被裁剪(即使用省略號繪製)?
實際上,以故障安全方式計算所需面積也不像聽起來那麼直截了當......例如TCanvas.GetTextHeight
沒有考慮換行符。
TCustomLabel.DoDrawText
內部使用或者
DrawTextW
或
DrawThemeTextEx
與
DT_CALCRECT
標誌,以確定它是否應使用省略號與否。這裏涉及的代碼很多,全部都是
private
。簡單地複製所有代碼並不完全符合我書中的「優雅」...
任何想法?
(我用Delphi 2010的情況下,任何人來了一個特殊的Delphi版本的解決方案)
更新1:我現在想通了,我可以簡單地直接調用
TCustomLabel.DoDrawText(lRect, DT_CALCRECT)
(這僅僅是宣佈爲
protected
),讓標籤執行所需的大小計算,而不必複製其代碼。我只需要確保臨時設置
EllipsisPosition
到
epNone
或完全使用臨時標籤實例。這實際上並不壞,如果沒有人能想到更簡單的解決方案,我可能會採用它。
更新2:我已經添加了我的解決方案作爲單獨的答案。事實證明,這比我預想的更直接,所以可能沒有更簡單/更好的方法來做到這一點,但爲了以防萬一,我將這個問題留出一段時間。
你應該考慮發佈你的解決方案作爲答案。你以後可能會接受它。 – 2010-11-30 12:48:14
@Andreas:如果沒有人提供更好的解決方案,我一直在計劃這麼做,而我目前還在玩弄你的解決方案。 ;) – 2010-11-30 12:52:18