2016-04-26 4 views
0

Ich verwende neueste Delphi 10.1 und erstellen Sie eine Multi-Device-App. Ich habe eine TLayout, die Align auf top festgelegt hat. Ich habe eine TLabel das ist mit in der erwähnten TLayout und hat AlignClient und TLabel.AutoSize auf True gesetzt.TLayout zu AutoSize zusammen mit TLabel

Problem ist, dass, wenn ich lange Etikettentext haben, TLabel wächst, aber TLayout nicht wächst.

Wie kann ich das beheben?

+0

Benötigen Sie unbedingt den 'TLayout'? Ist dies nicht der Fall, richten Sie die Beschriftung "Top" aus, und mit "AutoSize" und "WordWrap" wird sie nach Bedarf nach unten gezogen. –

+0

@TomBrunberg Ja, ich brauche ein Layout, weil ich neben der Beschriftung eine Schaltfläche haben muss. Ich hatte gehofft, dass das Layout eine AutoSize-Eigenschaft ähnlich der Beschriftung haben würde. – ary

+0

Ich verstehe nicht, warum Sie die Autosize aktivieren müssen, wenn die Ausrichtung Client ist. – MikeD

Antwort

0

Sie kennen die neue Größe des Etiketts, sobald Sie den Text ändern.
Label.Width wird aktualisiert, um die geänderte Breite widerzuspiegeln.

Sie haben 3 Möglichkeiten.

  1. Jedesmal, wenn man den Text des Etiketts zu ändern, lesen Sie auch seine width und aktualisieren Sie die zugehörigen TLayout zu passen (nicht empfohlen).

  2. das OnResize Ereignis des Labels zuweisen und etwas tun, wie folgt aus (empfohlen):

 
    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; 

Beachten Sie, dass Sie das gleiche Ereignis für alle Etiketten verwenden können.

  1. Erstellen Sie ein neues Steuerelement, das aus einem fusionierten Layout und einem Label besteht, das TLabel.DoResize überschreibt.
+1

Es geht um Höhe, die ich mir vorstelle. – NGLN

+0

@Johan Ja ist es über die Höhe. – ary