2016-04-26 4 views
0

私は最新のDelphi 10.1を使用してマルチデバイスアプリケーションを作成しています。私はTLayoutを持っていて、Aligntopに設定されています。私はTLayoutにあるTLabelを持っていて、AlignClientに設定し、そのTLabel.AutoSizeTrueに設定しています。TLayout with TLabel

長いラベルのテキストがある場合、TLabelが大きくなりますが、TLayoutは成長しません。

どうすればこの問題を解決できますか?

+0

「TLayout」は絶対に必要ですか?そうでなければ、ラベル 'Top'を整列させ、次に' AutoSize'と 'WordWrap'でそれを必要に応じて下方に伸ばします。 –

+0

@TomBrunbergはいラベルの横にボタンが必要なのでレイアウトが必要です。レイアウトに、ラベルに似たいくつかのAutoSizeプロパティがあることを期待していました。 – ary

+0

アライメントがクライアントの場合、自動サイズ調整が必要な理由がわかりません。 – MikeD

答えて

0

ラベルの新しいサイズは、テキストを変更するとすぐにわかります。
Label.Widthは、サイズ変更された幅を反映して更新されます。

3つのオプションがあります。ラベルのテキストを変更

  1. 毎回は、また、そのwidthを読み、(推奨されません)と一致するように関連付けられているTLayoutを更新します。

  2. は、ラベルのOnResizeイベントを割り当て、このような何かを行う(推奨):あなたはすべてのラベルに同じイベントを使用することができます

 
    procedure TForm45.Label1Resize(Sender: TObject); 
    const 
     ExtraWidthOfLayout = 10; 
    var 
     Lbl: TLabel; 
     Layout: TLayout; 
    begin 
     if (Sender is TLabel) and (TLabel(Sender).Parent is TLayout) then begin 
     Lbl:= TLabel(Sender); 
     Layout:= TLayOut(Lbl.Parent); 
     Layout.Width:= Lbl.Width + ExtraWidthOfLayout; 
     end; 
    end; 

注意を。

  1. TLabel.DoResizeをオーバーライドする融合レイアウトとラベルからなる新しいコントロールを作成します。
+1

それは私が想像する高さです。 – NGLN

+0

@Johanはい、その高さについてです。 – ary