Проблема начинается в TCustomLabel.AdjustBounds
с вызова DoDrawText
с контекстом устройства экрана и флагом DT_CALCRECT. Так что, если что-то раскрасит контекст этого устройства, оно будет нарисовано на экране. Флаг DT_CALCRECT
должен предотвратить это, но вызов DrawThemeTextEx
в Vcl.Themes.TUxThemeStyle.DoDrawText
, кажется, игнорирует DT_CALCRECT + LOptions.dwFlags DTT_CALCRECT и рисует в контексте устройства, где он должен вычислять только требуемый прямоугольник. Я не знаю, почему DrawThemeTextEx
делает это (пока), но это отправная точка.
ОБНОВЛЕНИЕ 1:
Delphi 2009, похоже, не подвержен этому влиянию, но также вызывает DrawThemeTextEx. Единственное отличие, которое я вижу, состоит в том, что все неиспользуемые поля записи Options равны нулю, тогда как в Delphi XE2 они содержат мусор. Возможно, DrawThemeTextEx требует, чтобы они были равны нулю.
ОБНОВЛЕНИЕ 2:
Разница между Delphi 2009 и XE2 заключается в том, что в Delphi 2009 указан не только DTT_CALCRECT, но и DTT_COMPOSITE.
В Delphi 2009 всегда устанавливается DTT_COMPOSITE:
Options.dwFlags := DTT_TEXTCOLOR or DTT_COMPOSITED or DTT_GLOWSIZE;
, тогда как в XE2 флаг устанавливается только в том случае, если этикетка нанесена на стекло:
if csGlassPaint in ControlState then
Include(LFormat, tfComposited);