TLabel
withをにEllipsisPosition
設定していてepEndEllipsis
、テキストが現在クリップされているかどうかを確認できるようにする必要があります。テキストを表示するために必要な面積を自分で計算し、それをラベルの実際の寸法と比較する以外に、これを行うためのより簡単でエレガントな方法を思いついた人はいますか?
実際、フェイルセーフな方法で必要な領域を計算することも、思ったほど簡単ではないようです...たとえば、TCanvas.GetTextHeight
改行は考慮されていません。
TCustomLabel.DoDrawText
内部的に、DrawTextW
またはフラグDrawThemeTextEx
とともにDT_CALCRECT
使用して、省略記号を使用するかどうかを決定します。そこにはかなり多くのコードが含まれており、そのすべてが宣言されていprivate
ます。そのコードをすべて複製するだけでは、私の本では「エレガント」とは言えません...
何か案は?
(誰かがDelphiバージョン固有のソリューションを思いついた場合に備えて、私はDelphi 2010を使用しています)
更新1:コードを複製せずにラベルに必要なサイズ計算を実行させるためにTCustomLabel.DoDrawText(lRect, DT_CALCRECT)
(単に宣言されている)直接呼び出すことができることがわかりました。protected
一時的に設定EllipsisPosition
するepNone
か、一時的なラベルインスタンスを完全に使用する必要があります。これは実際にはそれほど悪くはなく、もっと簡単な解決策を誰も考えられないのであれば、私はそれを使うかもしれません。
更新2:別の回答としてソリューションを追加しました。予想よりもかなり単純であることが判明したので、おそらくそれを行うためのより簡単でより良い方法はありませんが、念のため、この質問をもう少し長く開いたままにしておきます。