2011-12-07 62 views
6

我正在創建一些自定義的FireMonkey GUI控件。組件需要更新以響應用戶交互。 VCL控件可以調用Invalidate()將其放入隊列進行重新繪製。 FireMonkey有一個等效的方法嗎?FireMonkey控件是否具有與VCL Invalidate()方法等效的功能?

FireMonkey控件具有Repaint()方法,但AFAICT強制控件立即重新繪製。在某些情況下,隊列類型系統會更合適。

+0

我還沒有使用XE2,但我認爲一定有像「scene | object.refresh | redraw」 – ComputerSaysNo

+4

TControl.Realign更適合更多,因爲大多數時候沒有在FMX控件中直接繪圖,因爲它們是由原始的。如果你調用重新對齊,原語將被重繪 – az01

+0

http://stackoverflow.com/questions/8411143/firemonkey-controls-do-not-animate-smoothly – Shannon

回答

2
Control.InvalidateRect(RectF(0,0,width,height)); 
+0

據我所知,這是我的問題的正確答案。 InvalidateRect()方法不能像我希望的那樣工作,但我想這是由於VCL和FMX之間的差異。感謝Relativ。 – Shannon

2

FireMonkey的TControl.Repaint最終調用TPlatformWin.ReleaseWindow。如果Form.Transparency爲false,則此方法將調用Windows InvalidateRect函數,就像VCL的TControl.Invalidate一樣。

因此,重繪實際上做同樣的事情VCL的無效,除非Form.Transparency = true。

+0

感謝Giel的解釋 – Shannon

相關問題