2011-12-07 12 views
6

Estoy creando algunos controles personalizados de FireMonkey GUI. Los componentes necesitan actualizarse en respuesta a las interacciones del usuario. Los controles VCL pueden llamar a Invalidate() para colocarlos en una cola para volver a pintar. ¿FireMonkey tiene un método equivalente?¿Los controles de FireMonkey tienen un equivalente al método VCL Invalidate()?

Los controles FireMonkey tienen un método de Repaint(), pero AFAICT obliga a volver a pintar el control inmediatamente. Un sistema de tipo de cola sería más apropiado en algunas circunstancias.

+0

No he usado XE2 todavía, pero supongo que debe haber algo como "escena | objeto.refresh | volver a dibujar" – ComputerSaysNo

+4

TControl.Realign se ajusta más porque la mayoría de las veces no hay un dibujo directo en los controles FMX, ya que están hechos de primitivo. Si llama a Realign, las primitivas se volverán a dibujar – az01

+0

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

Respuesta

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

Por lo que puedo decir, esta es la respuesta correcta a mi pregunta. El método InvalidateRect() no funciona como esperaba, pero supongo que se debe a las diferencias entre VCL y FMX. Gracias Relativ. – Shannon

2

FireMonkey's TControl.Repaint termina llamando a TPlatformWin.ReleaseWindow. Si Form.Transparency es falso, este método llama a la función InvalidateRect de Windows, al igual que TControl.Invalidate de VCL.

Así que Repintat hace lo mismo que VCL's Invalidate, a menos que Form.Transparency = true.

+0

Gracias por la explicación Giel – Shannon

Cuestiones relacionadas