2011-12-07 8 views
6

Tworzę niestandardowe formanty GUI FireMonkey. Komponenty muszą być aktualizowane w odpowiedzi na interakcje użytkownika. Kontrolki VCL mogą wywoływać Invalidate() w kolejce do odświeżania. Czy FireMonkey ma równoważną metodę?Czy kontrole FireMonkey mają odpowiednik metody VCL Invalidate()?

Sterowanie FireMonkey ma metodę Odśwież(), ale AFAICT, które wymusza natychmiastowe przemalowanie elementu sterującego. System typu kolejki byłby bardziej odpowiedni w pewnych okolicznościach.

+0

Nie użyłem jeszcze XE2, ale zakładam, że musi być coś takiego jak "scene | object.refresh | redraw" – ComputerSaysNo

+4

TControl.Realign pasuje więcej, ponieważ przez większość czasu nie ma bezpośredniego rysowania w kontrolkach FMX, ponieważ wykonane są z prymitywów. Jeśli wywołasz Realign, prymitywy zostaną przerysowane – az01

+0

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

Odpowiedz

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

O ile mi wiadomo, jest to poprawna odpowiedź na moje pytanie. Metoda InvalidateRect() nie działa tak, jak miałem nadzieję, ale prawdopodobnie jest to spowodowane różnicami między VCL i FMX. Dzięki Relativ. – Shannon

2

TControl.Monitor FireMonkey kończy wywoływanie TPlatformWin.ReleaseWindow. Jeśli Form.Transparency ma wartość false, ta metoda wywołuje funkcję InvalidateRect systemu Windows, podobnie jak w przypadku TControla VCL.

Tak więc Odświeżenie faktycznie robi to samo, co powoduje unieważnienie VCL, chyba że Form.Transparency = true.

+0

Dzięki za wyjaśnienie Giel – Shannon

Powiązane problemy