TLabel
テキストが大きすぎてラベルの範囲に収まらない場合は、 a のフォント サイズを小さくしようとしています。これを実現するためにラベルに設定できるプロパティが見つからなかったため、独自のメソッドを作成してみました。私の方法は、TCanvas.TextWidthを使用してラベル内のテキストの幅を測定し、テキストの幅がラベルの幅に収まるまでフォントを縮小することで機能します。
void __fastcall ShrinkFontToFitLabel( TCanvas * Canvas, TLabel * Label )
{
float NewFontSize = Label->Font->Size;
Canvas->Font->Family = Label->Font->Family;
Canvas->Font->Size = NewFontSize;
while( Canvas->TextWidth( Label->Text ) > Label->Width && NewFontSize > MinimumFontSize )
{
NewFontSize -= FontSizeDecrement;
Canvas->Font->Size = NewFontSize;
}
Label->Font->Size = NewFontSize;
}
これはうまくいく場合もありますが、フォントが十分に縮小されない場合もあります。呼び出しから得られる値Canvas->TextWidth
は、テキストに合わせるために実際に必要なラベルの幅のピクセル数よりもはるかに小さいようです。
私はCanvas->TextWidth
間違って使用していますか?TLabel
文字列の幅を計算したり、テキストが寸法内に収まるようにフォントのサイズを変更したりするより良い方法はありますか?
編集:
この場合、TCanvas
ラベルが置かれている関数に渡しています。TCanvas
それとLabel->Canvas
. どちらもテキスト幅に同じ数値を与え、両方とも文字列全体を表示するために必要なピクセル単位の実際の値を下回っています。