このような「バグ」は、実際には FM2 で行われた変更に関連しています (XE3/FM2 について言及していますが、質問は XE2/FMX としてタグ付けされています) が、FMX アプリケーションでも発生することがありました。解決策は、単にrepaint()
ラベルの関数を呼び出すことです。簡単にするために仮定ShowMessage
しますが、UI で何か (メッセージ ボックス、パネル、ベクター シェイプなど) を扱うときはいつでも同じことが当てはまります。
ShowMessage('My Message');
Label1.Repaint;
repaint() の使用は、適切な場合に利用する必要があります。これは (一般的に言えば) 負荷の高い操作であり、自由に使用する必要があります。一般的なガイドライン;
- 必要な時だけ使う
- 子コンポーネントを 1 つだけ再描画する必要がある場合は、そのコンポーネントのみを再描画します
- 多くの子コンポーネントを再描画する必要がある場合は、代わりに親コンポーネントを再描画します
- 再描画は、エフェクト自体ではなく、エフェクトの親コンポーネントで使用する必要があります (つまり、
TLabel
ではなく でTGlowEffect
) 。
私は実際に、アプリケーションのインターフェイス全体を TLayout または TRectangle 内に claNull の色で配置することにしました。このようにして、1 回の呼び出しでインターフェイス全体を再描画できます。次に、個々の主要な部分を子 TLayout (アラート バーなど) に分割し、アニメーション化する必要がある場合は、タイマーで再描画することを選択できます (たとえば、新しいメッセージがあるときにビューにスライドします)。