2012-05-18 14 views
12

Pracuję z rysowaniem w czasie rzeczywistym na sporej formie. Kiedy użytkownik zmienia rozmiar formularza, nie chcę stosować zmiany rozmiaru do renderowania grafiki, dopóki użytkownik nie zwolni przycisku myszy, dlatego zmiana rozmiaru jest zakończona. Jak mogę to wykryć i zmienić rozmiar tylko mojego renderowania po zakończeniu zmiany rozmiaru formularza? Ponieważ teraz, jeśli użyję zdarzenia OnResize w moim formularzu, będzie ono ciągle ponownie renderować wszystko dla każdego piksela, który przesunie mysz.Jak wykrywać, kiedy zmiana rozmiaru rozpoczyna się i kończy?

Próbowałem przewijać mysz w dół/w górę zdarzeń i śledzić to, ale te zdarzenia nie są wywoływane, gdy rozmiar formularza jest zmieniany.

Odpowiedz

20

Aby wykryć przenoszenie lub ustawienie rozmiaru, należy zapoznać się z komunikatem WM_ENTERSIZEMOVE. Jest on wysyłany do okna, gdy użytkownik kliknie pasek tytułu okna lub krawędź rozmiaru (co powoduje, że okno wchodzi w ruch lub pętlę rozmiaru).

Aby wykryć przenoszenie lub zmianę rozmiaru, należy zapoznać się z komunikatem WM_EXITSIZEMOVE. Jest on wysyłany do okna, gdy użytkownik zwolni pasek tytułu okna lub krawędź rozmiaru (co powoduje, że okno wychodzi z pętli ruchu lub rozmiaru).

Można złapać jednego z nich, oświadczając (i wdrażania) na poziomie ich forma:

procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE; 
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE; 
+6

+1. Mam nadzieję, że nie przeszkadzało ci to w niewielkiej pomocy. :) –

+0

TLama: Czy istnieje odpowiednia metoda zrobienia tego w FMX? – RobertFrank

Powiązane problemy