2016-04-26 54 views
0

我正在使用最新的Delphi 10.1並創建一個多設備應用程序。我有一個TLayout,它有Align設置爲top。我有一個TLabel,它與上述TLayout中的一樣,並且具有設置爲ClientAlign和設置爲TrueTLabel.AutoSizeTLayout與自動尺寸一起TLabel

問題是,當我有很長的標籤文本,TLabel增長,但TLayout不增長。

我該如何解決這個問題?

+0

你絕對需要'TLayout'嗎?如果不是,將標籤'Top'對齊,然後'AutoSize'和'WordWrap'將根據需要向下生長。 –

+0

@TomBrunberg是的,我需要佈局,因爲我需要在標籤旁邊有一個按鈕。我希望佈局會有一些類似於標籤的AutoSize屬性。 – ary

+0

我不明白你爲什麼需要Autosize,如果對齊是客戶端。 – 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