2011-12-18 25 views
10

Kể từ khi chuyển một ứng dụng từ XE sang XE2 tôi nhận thấy một lỗi lạ, chỉ cần mở biểu mẫu trong ide hoặc chạy ứng dụng, một hộp hình vuông màu trắng được vẽ ở góc trên cùng bên trái của màn hình (trong biểu mẫu), sẽ biến mất khi di chuột hoặc cửa sổ. Tôi theo dõi này xuống TLabel, chỉ cần thả một trong các hình thức và thiết lập Glowsize trên 0 gây ra vấn đề.Delphi XE2 TLabel glowsize gây ra vấn đề đồ họa ở góc trên bên trái của màn hình

Tôi đã cài đặt lại và cập nhật lên bản cập nhật XE2 mới nhất3 và sự cố vẫn xảy ra. Bất cứ ai cũng có một đầu mối những gì đang xảy ra?

example 1

example 2

enter image description here

Trả lời

13

Vấn đề bắt đầu từ TCustomLabel.AdjustBounds với một cuộc gọi đến DoDrawText với bối cảnh thiết bị của màn hình và DT_CALCRECT cờ. Vì vậy, nếu bất cứ điều gì sơn trên bối cảnh thiết bị đó, nó sẽ được vẽ lên màn hình. Cờ DT_CALCRECT nên ngăn điều đó nhưng cuộc gọi DrawThemeTextEx trong Vcl.Themes.TUxThemeStyle.DoDrawText dường như bỏ qua DT_CALCRECT + LOptions.dwFlags DTT_CALCRECT và vẽ lên ngữ cảnh thiết bị ở đó nó chỉ nên tính hình chữ nhật được yêu cầu. Tôi không biết tại sao DrawThemeTextEx thực hiện điều đó (chưa) nhưng đó là điểm khởi đầu.

UPDATE 1:
Delphi 2009 dường như không bị ảnh hưởng bởi điều này, nhưng cũng kêu gọi DrawThemeTextEx. Sự khác biệt duy nhất tôi thấy là tất cả các lĩnh vực không sử dụng của các hồ sơ Options là số không trong khi trong Delphi XE2 chúng chứa rác. Có lẽ DrawThemeTextEx cần chúng bằng không.

UPDATE 2:
Sự khác biệt giữa Delphi 2009 và XE2 là trong Delphi 2009 không chỉ DTT_CALCRECT được quy định nhưng cũng DTT_COMPOSITE.

Trong Delphi 2009 DTT_COMPOSITE luôn thiết lập:

Options.dwFlags := DTT_TEXTCOLOR or DTT_COMPOSITED or DTT_GLOWSIZE; 

trong khi ở XE2 cờ chỉ được thiết lập nếu nhãn được vẽ trên kính:

if csGlassPaint in ControlState then 
    Include(LFormat, tfComposited); 
+0

đăng lên QC http://qc.embarcadero.com/wc/qcmain.aspx?d=102146 – hikari

2

vấn đề này dường như biến mất nếu bạn vô hiệu hóa AutoSize trên nhãn.

Tôi đã không điều tra sâu hơn lý do tại sao, nhưng như một giải pháp cho đến khi lỗi đó được sửa chữa thì không sao.

+1

Điều này dường như tương quan với câu trả lời của Andreas Hausladen. Ông nói rằng vấn đề này liên quan đến việc gọi 'DrawThemeTextEx' với' DT_CALCRECT'. Tôi tưởng tượng rằng chỉ được thực hiện khi có nhu cầu để tính toán kích thước của nhãn = khi 'AutoSize' của nhãn là' True'. Nếu bạn bật 'AutoSize', không có cuộc gọi nào có' DT_CALCRECT' được thực hiện và do đó, lỗi này không được tạo ra. –

+1

Yup hoạt động; thiết lập autosize sau khi tạo biểu mẫu và trước khi thay đổi chú thích cũng có vẻ như để tránh vấn đề (có thể tái xuất hiện sau này). Nó vẫn chưa được sửa trong bản cập nhật mới nhất4. – hikari

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