2009-05-14 25 views
6

Tôi gặp sự cố Tôi không thể giải quyết ngay cả khi tôi dành nhiều thời gian để cố gắng thực hiện.GridPanel không điều chỉnh lúc thay đổi kích thước đầu tiên

Tôi thường sử dụng GridPanels để căn chỉnh các điều khiển trên biểu mẫu. Nó có, tuy nhiên, một lỗi gây phiền nhiễu. Khi chế độ căn chỉnh GridPanel là alClient và tôi tối đa hóa cửa sổ cha của nó, GridPanel điều chỉnh kích thước mới của cửa sổ đó, tuy nhiên, các điều khiển nằm trên lưới thì không. Họ ở trong cùng một vị trí trước khi thay đổi kích thước cửa sổ. Nó chỉ xảy ra ở mức tối đa của cửa sổ đầu tiên. Nếu cửa sổ được thay đổi kích thước đầu tiên theo cách thủ công, thì mọi thứ đều ổn. Tôi nghĩ rằng lưới điều chỉnh điều khiển con của nó sau sự kiện thay đổi kích thước thứ hai (??).

Điều gì cần làm khiến GridPanel hoạt động bình thường nếu có lỗi này? Nó có thể là đủ để gửi một tin nhắn cho nó (nhưng những gì tin nhắn?), Tôi không biết. Tôi đã cố gắng sử dụng Realign, Refresh… nhưng chúng không giúp được gì.

Cảm ơn sự giúp đỡ của bạn trước,

Mariusz.

Trả lời

7

Ah, tôi cũng gặp vấn đề tương tự. Nó có thể liên quan đến một vấn đề thay đổi kích thước trong VCL. Bạn có thể muốn thử the fix by Andreas Hausladen. Nó dường như làm việc cho tôi trong hầu hết các trường hợp.

1

Tôi cũng gặp lỗi này, trên một số dự án. Tôi không chắc làm thế nào tôi đã giải quyết vấn đề này (nó đã được dự án cho chủ nhân trước đây của tôi, tôi không có quyền truy cập vào mã nguồn này nữa). Tôi nghĩ rằng tôi đã te vẽ lại/làm mới khung cha mẹ hoặc hình thức mà trên đó GridPanel đã được đặt.

0

thay đổi kích thước của chủ sở hữu gọi GridPanel.Invalidate. Tôi đã không kiểm tra nó. Tôi hy vọng nó hoạt động.

2

Tôi đã tìm thấy một mẹo.

trong OnResize sự kiện của cha mẹ của lưới ô vuông, thay đổi chiều rộng của bảng chữ cái thêm 1 pixel.

sau đó gridPanel sẽ thấy kích thước thay đổi, sau đó sắp xếp lại phụ điều khiển trong gridpanel ..

mẫu dưới ..

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.Width := GridPanel1.Width - 1; // subtract 1 
    GridPanel1.Width := GridPanel1.Width + 1; // recover width by adding 1 
end; 
+0

Hơi liên quan http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

Thay đổi độ rộng/hủy bỏ hiệu lực điều khiển không làm việc cho tôi (một cái gì đó thay đổi với các phiên bản gần đây của RAD Studio?).

Dù sao một tương tự, thì giải pháp đơn giản cùng dòng đó là:

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.ControlCollection.BeginUpdate; 
    GridPanel1.ControlCollection.EndUpdate; 
end; 
Các vấn đề liên quan