問題は、画面のデバイス コンテキストとフラグ DT_CALCRECT を使用したTCustomLabel.AdjustBounds
への呼び出しから始まります。DoDrawText
したがって、そのデバイス コンテキストに何かが描画されると、画面に描画されます。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);