我正在使用最新的Delphi 10.1並創建一個多設備應用程序。我有一個TLayout
,它有Align
設置爲top
。我有一個TLabel
,它與上述TLayout
中的一樣,並且具有設置爲Client
的Align
和設置爲True
的TLabel.AutoSize
。TLayout與自動尺寸一起TLabel
問題是,當我有很長的標籤文本,TLabel
增長,但TLayout
不增長。
我該如何解決這個問題?
我正在使用最新的Delphi 10.1並創建一個多設備應用程序。我有一個TLayout
,它有Align
設置爲top
。我有一個TLabel
,它與上述TLayout
中的一樣,並且具有設置爲Client
的Align
和設置爲True
的TLabel.AutoSize
。TLayout與自動尺寸一起TLabel
問題是,當我有很長的標籤文本,TLabel
增長,但TLayout
不增長。
我該如何解決這個問題?
只要您更改文字,就知道標籤的新尺寸。
Label.Width
將更新以反映調整後的寬度。
您有3個選項。
每次更改標籤的文本,也讀了width
和更新相關TLayout匹配(不推薦)。
分配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;
注意,您可以使用相同的事件爲所有標籤。
TLabel.DoResize
的融合佈局和標籤組成。
你絕對需要'TLayout'嗎?如果不是,將標籤'Top'對齊,然後'AutoSize'和'WordWrap'將根據需要向下生長。 –
@TomBrunberg是的,我需要佈局,因爲我需要在標籤旁邊有一個按鈕。我希望佈局會有一些類似於標籤的AutoSize屬性。 – ary
我不明白你爲什麼需要Autosize,如果對齊是客戶端。 – MikeD