2011-12-26 14 views
5

mam postać z TStatusBar i dolny wyrównane TPanel, dno wyrównane TSplitter i klient wyrównane TPanel, jak pokazano w poniższej ekranu:TStatusBar z dolnym ustawionego panelu

Screen Shot 1 - Before - Good

(Rozgałęźnik w kolorze czerwonym, aby uczynić go trochę bardziej oczywiste)

Przycisk1 prostu zwiększa wysokość Panel1 przez 20:

Panel1.Height := Panel1.Height + 20; 

Ale po kliknięciu kolejność elementów sterujących zmienia się, gdy Panel1 jest dmuchany, pasek stanu i rozdzielacz zmieniają teraz pasek stanu.

Screen Shot 2 - After - Bad

Dzieje się tak tylko wtedy, gdy wysokość Panel1 zwiększa się o więcej niż wysokość StatusBar1 (19).

Zakładam, że jest to spowodowane dwoma dolnymi wyrównanymi kontrolkami, ale brakuje mi dokładnej przyczyny problemu i sposobu obejścia tego problemu.

Obecnie używam XE2, ale mam ten sam problem z D2010.

Czy w tej sytuacji można ustawić wysokość panelu 1 na dowolną wartość, upewniając się, że elementy sterujące zachowują oczekiwane pozycje?

+0

Miałem nadzieję, że po czternastu latach Bo ... Impr ... Kod G ... Embarcadero naprawiłby to. –

Odpowiedz

5

Obejście problemu poprzez ustawienie właściwości Top dla elementów sterujących po zmianie wysokości panelu.

StatusBar1.Top := Panel1.Top + Panel1.Height; 
+0

Sprytnie proste rozwiązanie. Doskonały! Dziękuję Ci. – davea

3

Try This (pracował w porządku dla mnie):

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Panel1.SetBounds(Panel1.Left, Panel1.Top - 20, 
        Panel1.Width, Panel1.Height + 20); 
end; 
+0

Również doskonałe rozwiązanie. Dziękuję Ci. – davea

2

Ewentualnie, jeśli nie chcesz, aby śledzić, gdzie jesteś Zmiana pozycji/rozmiaru formantów,

type 
    TForm1 = class(TForm) 
    .. 
    private 
    protected 
    procedure AlignControls(AControl: TControl; var Rect: TRect); override; 

.. 

procedure TForm1.AlignControls(AControl: TControl; var Rect: TRect); 
begin 
    inherited; 
    if AControl = Panel1 then 
    StatusBar1.Top := Panel1.Top + Panel1.Height; 
end; 
+0

Doskonały pomysł, ale ustawiam wysokość panelu tylko w jednym miejscu, więc mogę wybrać coś prostszego. Będę o tym pamiętać, jeśli coś się zmieni ... – davea

Powiązane problemy