Il problema inizia in TCustomLabel.AdjustBounds
con una chiamata a DoDrawText
con contesto di periferica dello schermo e il DT_CALCRECT bandiera. Quindi, se qualcosa dipinge sul contesto di quel dispositivo, sarà dipinto sullo schermo. Il flag DT_CALCRECT
dovrebbe impedire che ma la chiamata DrawThemeTextEx
in Vcl.Themes.TUxThemeStyle.DoDrawText
sembra ignorare DT_CALCRECT + LOptions.dwFlags DTT_CALCRECT e dipinge nel contesto del dispositivo in cui dovrebbe solo calcolare il rettangolo richiesto. Non so perché DrawThemeTextEx
lo faccia (ancora), ma è un punto di partenza.
UPDATE 1:
Delphi 2009 non sembra essere influenzata da questo, ma richiede anche DrawThemeTextEx. L'unica differenza che vedo è che tutti i campi inutilizzati del record di Opzioni sono zero mentre in Delphi XE2 contengono spazzatura. Forse DrawThemeTextEx richiede che siano zero.
UPDATE 2:
La differenza tra Delphi 2009 e XE2 è che in Delphi 2009 non solo DTT_CALCRECT è specificato, ma anche DTT_COMPOSITE.
In Delphi 2009 il DTT_COMPOSITE è sempre impostato:
Options.dwFlags := DTT_TEXTCOLOR or DTT_COMPOSITED or DTT_GLOWSIZE;
mentre nel XE2 il flag è impostato solo se l'etichetta è dipinto su vetro:
if csGlassPaint in ControlState then
Include(LFormat, tfComposited);
fonte
2011-12-18 23:02:29
pubblicato su QC http://qc.embarcadero.com/wc/qcmain.aspx?d=102146 – hikari