2011-12-18 19 views
10

XE'den XE2'ye bir uygulamayı taşıdıktan sonra garip bir hatayı fark ettim, yalnızca ide'de formu açmak veya uygulamayı çalıştırmak için beyaz bir kare kutu çizildi Ekranın sol üst köşesinde (formun dışında), fareyi veya pencereyi gezdirerek uzaklaşır. Bunu TLabel'e kadar takip ettim, sadece formun üzerine düştüm ve Glowsize değerini 0'ın üzerine çıkararak sorunun neden oldu.Delphi XE2 TLabel glowsize, ekranın sol üst köşesinde grafik sorununa neden oluyor

Son XE2 güncelleştirmesi3'e yeniden yükledim ve güncelleştirdim ve sorun hala devam ediyor. Neler olup bittiği hakkında bir ipucu var mı?

enter image description here

cevap

13

sorun ekranın aygıt içeriğini ile DoDrawText bir çağrı ve bayrak DT_CALCRECT ile TCustomLabel.AdjustBounds başlar

example 2

example 1

. Dolayısıyla, bu cihaz bağlamında herhangi bir şey boyadığında, ekrana boyanacaktır. DT_CALCRECT bayrağının bunu engellemesi gerekir, ancak Vcl.Themes.TUxThemeStyle.DoDrawText numaralı DrawThemeTextEx numaralı çağrı DT_CALCRECT + LOptions.dwFlags DTT_CALCRECT öğesini göz ardı eder gibi görünür ve yalnızca gerekli dikdörtgeni hesaplaması gereken aygıt bağlamına boyar. Bilmiyorum neden DrawThemeTextEx bunu (henüz), ama bir başlangıç ​​noktasıdır.

GÜNCELLEME 1:
Delphi 2009 bu etkilenecek gibi görünüyor ama aynı zamanda DrawThemeTextEx çağırır etmez. Gördüğüm tek fark, Seçenek kayıtlarının kullanılmayan tüm alanlarının sıfır olması, Delphi XE2'de ise çöp içermesidir. Belki DrawThemeTextEx bunların sıfır olması gerekiyor.

GÜNCELLEME 2:
Delphi 2009 ve XE2'de arasındaki fark Delphi 2009 değil sadece DTT_CALCRECT aynı zamanda DTT_COMPOSITE belirtilen olmasıdır.

DTT_COMPOSITE hep ayarlanır Delphi 2009'da

: etiket cama boyanmış ise XE2'de bayrağı sadece ayarlanır oysa

Options.dwFlags := DTT_TEXTCOLOR or DTT_COMPOSITED or DTT_GLOWSIZE; 

:

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

http://qc.embarcadero.com/wc/qcmain.aspx?d=102146 – hikari

2

sorun eğer kaybolmaktadır Etikette AutoSize'i devre dışı bırakın.

ben araştırmak değildi derin niçin ama güzel yaptığı hata düzeltilene kadar geçici bir çözüm olarak.

+1

Bu Andreas Hausladen yanıt ile ilişkili olduğu görünmektedir qc yayınlanır. Sorunun, 'DTCALCRECT' ile 'DrawThemeTextEx' çağırmakla ilgili olduğunu söylüyor. Sadece etiketin boyutunun hesaplanması gerektiğinde yapıldığını hayal ediyorum = etiketin 'AutoSize' 'True' olduğunda. 'AutoSize' seçeneğini açarsanız, 'DT_CALCRECT' ile çağrı yapılmaz ve sonuç olarak, hata üretilmez. Çalışıyor –

+1

Yup; Daha sonra formu oluşturulduktan sonra ve resim yazısı değiştirmeden önce autosize ayarı da (muhtemelen sonra tekrar görünen) sorunu önlemek gibi görünüyor. En son update4 içinde sabit kalıyor. – hikari

İlgili konular