2010-10-27 29 views
7

Trong Delphi 2009 tôi thấy rằng nhấp nháy của một PageControl - xảy ra trong quá trình thay đổi kích thước của biểu mẫu - có thể được giảm bằng cách đặt thuộc tính DoubleBuffered thành true.Làm thế nào tôi có thể làm giảm PageControl nhấp nháy trong Delphi?

Tuy nhiên nếu tôi thêm điều khiển vào tab PageControl, chúng sẽ nhấp nháy bất kể cài đặt thuộc tính DoubleBuffered của chúng. Tôi cũng đã thử và không có chủ đề thời gian chạy được bật.

+1

Có, bằng cách sử dụng các điều khiển trang có thể thay đổi kích thước rất đau đớn. Trong hầu hết các trường hợp, theo kinh nghiệm của tôi, thiết lập thuộc tính đệm đôi của mọi điều khiển (điều khiển trang và mọi điều khiển con) để khắc phục sự cố phần lớn vấn đề, nhưng trong một số trường hợp, sẽ gây ra * các vấn đề hiển thị khác cho một số điều khiển con. Vì tôi rất quan tâm đến chất lượng hình ảnh, tôi có xu hướng 1) cho phép tăng gấp đôi bộ đệm khi thay đổi kích thước và sử dụng bộ hẹn giờ để tắt 1/5 giây sau sự kiện thay đổi kích thước cuối cùng, 2) * ẩn * toàn bộ điều khiển trang trong khi đổi kích thước (và thay thế bằng một số "chỉ báo kích thước cửa sổ") hoặc 3) phát triển các điều khiển tùy chỉnh của riêng tôi. –

+0

Bạn có đang sử dụng các điều khiển cơ sở dữ liệu không? Hơn có thể TDataSet.DisableControls trong khi cập nhật/thêm sẽ giúp đỡ. –

+0

Sẽ rất hữu ích nếu bạn cho chúng tôi biết thời điểm và nơi xảy ra nhấp nháy. –

Trả lời

4

Đặt ParentBackground thành False cho các thành phần trên PageControl đã giúp ích rất nhiều. Tuy nhiên điều này dẫn đến một màu khác nhau của các thành phần bảng điều khiển, tất cả chúng đều có một nền tối hơn bây giờ. Có thể điều này có thể được sửa một cách dễ dàng (không mất hỗ trợ Theme).

Tôi cũng đã cài đặt VCL Fix Pack có bản sửa lỗi cho QC 56252 (TPageControl nhấp nháy rất nhiều với hoạt động theming).

0

này còn xa mới hoàn hảo, nhưng bạn có thể muốn sử dụng này:

protected 
    procedure WMExitSize(var Message: TMessage); message WM_EXITSIZEMOVE; 
    procedure WMEnterSize(var Message: TMessage); message WM_ENTERSIZEMOVE; 

procedure TFormMain.WMEnterSize(var Message: TMessage); 
begin 
    if Assigned(PageControlView.ActivePage) then 
    PageControlView.Align := alNone; 
end; 

procedure TFormMain.WMExitSize(var Message: TMessage); 
begin 
    if Assigned(PageControlView.ActivePage) then 
    PageControlView.Align := alClient; 
end; 

Đó là tốt nhất Tôi thấy điều này đến nay, và sẽ làm giảm cửa sổ cập nhật kiểm soát trang của bạn. Tuy nhiên, điều này có thể kém hơn, nhưng đó là vấn đề của ý kiến ​​...

+0

Cảm ơn bạn vì ý tưởng này. Tuy nhiên bây giờ tôi nghĩ rằng có một giải pháp - thiết lập ParentBackground thành False cho các thành phần trên PageControl. Tôi không biết rằng việc tạo ra một giao diện RAD đơn giản có thể phức tạp như vậy :) – mjn

+0

Không có thứ gì đơn giản như vậy, khi bạn có một sự kết hợp giữa mã thư viện điều khiển chung của Windows và những thứ không phải là các điều khiển Windows. Đây chỉ là đỉnh của tảng băng trôi. –

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