問題は、画面のデバイスコンテキストとフラグDT_CALCRECTとDoDrawText
の呼び出しでTCustomLabel.AdjustBounds
で始まります。したがって、そのデバイスコンテキストでペイントすると、画面にペイントされます。 DT_CALCRECT
フラグはそれを防ぐべきですが、Vcl.Themes.TUxThemeStyle.DoDrawText
のDrawThemeTextEx
コールは、DT_CALCRECT + LOptions.dwFlags DTT_CALCRECTを無視して、必要な四角形のみを計算するデバイスコンテキストにペイントするように見えます。私はなぜそれが(まだ)DrawThemeTextEx
を行うのか分からないが、それは出発点である。
UPDATE 1:
Delphi 2009には、この影響を受けているように見えるだけでなく、DrawThemeTextExを呼び出していません。私が見る唯一の違いは、Optionsレコードの未使用のフィールドはすべてゼロであるのに対して、Delphi XE2では使用できないフィールドはゼロであるということです。おそらく、DrawThemeTextExはそれらをゼロにする必要があります。
UPDATE 2:
のDelphi 2009とXE2は、Delphi 2009年にDTT_CALCRECTはなく、DTT_COMPOSITE指定されていないだけということであるとの違い。
DTT_COMPOSITEが常に設定されているのDelphi 2009年に
:ラベルはガラスに描かれている場合XE2にフラグのみが設定されているのに対し、
Options.dwFlags := DTT_TEXTCOLOR or DTT_COMPOSITED or DTT_GLOWSIZE;
は:
if csGlassPaint in ControlState then
Include(LFormat, tfComposited);
QCに投稿http://qc.embarcadero.com/wc/qcmain.aspx?d=102146 – hikari