我正在創建一些自定義的FireMonkey GUI控件。組件需要更新以響應用戶交互。 VCL控件可以調用Invalidate()將其放入隊列進行重新繪製。 FireMonkey有一個等效的方法嗎?FireMonkey控件是否具有與VCL Invalidate()方法等效的功能?
FireMonkey控件具有Repaint()方法,但AFAICT強制控件立即重新繪製。在某些情況下,隊列類型系統會更合適。
我正在創建一些自定義的FireMonkey GUI控件。組件需要更新以響應用戶交互。 VCL控件可以調用Invalidate()將其放入隊列進行重新繪製。 FireMonkey有一個等效的方法嗎?FireMonkey控件是否具有與VCL Invalidate()方法等效的功能?
FireMonkey控件具有Repaint()方法,但AFAICT強制控件立即重新繪製。在某些情況下,隊列類型系統會更合適。
Control.InvalidateRect(RectF(0,0,width,height));
據我所知,這是我的問題的正確答案。 InvalidateRect()方法不能像我希望的那樣工作,但我想這是由於VCL和FMX之間的差異。感謝Relativ。 – Shannon
FireMonkey的TControl.Repaint最終調用TPlatformWin.ReleaseWindow。如果Form.Transparency爲false,則此方法將調用Windows InvalidateRect函數,就像VCL的TControl.Invalidate一樣。
因此,重繪實際上做同樣的事情VCL的無效,除非Form.Transparency = true。
感謝Giel的解釋 – Shannon
我還沒有使用XE2,但我認爲一定有像「scene | object.refresh | redraw」 – ComputerSaysNo
TControl.Realign更適合更多,因爲大多數時候沒有在FMX控件中直接繪圖,因爲它們是由原始的。如果你調用重新對齊,原語將被重繪 – az01
http://stackoverflow.com/questions/8411143/firemonkey-controls-do-not-animate-smoothly – Shannon