I don’t think there is one unified “right way” for updating visual components in Firemonkey.
However, as a recommendation from personal experience, I would take the .repaint route - this method is at the TControl level, and therefore it precedes primitives and stylish controls (which usually consist of primitives) and therefore applies to all visual controls. It also does not require parameters, so this is a good comprehensive solution.
I noticed that Firemonkey always had a problem correctly redrawing the controls themselves. Often I stay with the “shadow” of the previous visual control / primitive and have to call .repaint manually to update it. This has noticeably worsened with FM2 and FM3 (presumably due to optimizations for mobile platforms), and therefore does the .repaint , especially if effects like TGlow and moving or rotating controls / primitives have become standard practice for me.
source share