2011-12-26 24 views
5

Tôi có một hình thức với một TStatusBar, và phía dưới thẳng hàng TPanel, đáy thẳng hàng TSplitter và khách hàng liên kết TPanel, như thể hiện trong hình bên dưới:TStatusBar với đáy liên kết bảng

Screen Shot 1 - Before - Good

(Các splitter là màu đỏ để làm cho nó rõ ràng hơn một chút)

Button1 chỉ đơn giản là làm tăng chiều cao của Panel1 20:

Panel1.Height := Panel1.Height + 20; 

Nhưng khi nhấp vào thứ tự của các điều khiển thay đổi, với Panel1 đang thổi thanh trạng thái và bộ chia hiện đang thay đổi kích thước thanh trạng thái.

Screen Shot 2 - After - Bad

này chỉ xảy ra khi chiều cao của Panel1 được tăng hơn chiều cao của StatusBar1 (19).

Tôi cho rằng điều này là do có hai điều khiển căn chỉnh dưới cùng, nhưng tôi thua lỗ về nguyên nhân chính xác của sự cố và cách khắc phục sự cố.

Tôi hiện đang sử dụng XE2, nhưng tôi có cùng sự cố với D2010.

Trong trường hợp này có cách nào để đặt chiều cao của Panel1 thành giá trị tùy ý, đồng thời đảm bảo rằng các điều khiển duy trì vị trí mong đợi của chúng?

+0

Tôi đã hy vọng rằng sau mười bốn năm, Bo… Impr… Code G… Embarcadero đã sửa lỗi này. –

Trả lời

5

Khắc phục sự cố bằng cách đặt thuộc tính Top cho các điều khiển sau khi thay đổi chiều cao của bảng.

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

Một giải pháp đơn giản xảo quyệt. Xuất sắc! Cảm ơn bạn. – davea

3

Cố gắng này (làm việc tốt cho tôi):

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

Cũng là một giải pháp tuyệt vời. Cảm ơn bạn. – davea

2

Ngoài ra, nếu bạn không muốn theo dõi về nơi bạn đang thay đổi vị trí/kích thước của điều khiển,

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

Một ý tưởng tuyệt vời, nhưng tôi chỉ thiết lập chiều cao bảng ở một nơi duy nhất, vì vậy tôi có thể đi với một cái gì đó đơn giản hơn. Tôi sẽ ghi nhớ điều đó nếu mọi thứ thay đổi ... – davea

Các vấn đề liên quan