Delphi: обнаружение начала и конца перемещения окна
Я использую onidle-event для некоторых простых анимаций, и он работает нормально. Проблема, однако, в том, что когда пользователь начинает перемещать или изменять размер окна, onidle-событие прекращает запуск до тех пор, пока не будет завершена операция перемещения/изменения размера.
Мне нужно определить, когда это произойдет, чтобы я мог приостановить все анимации. Но как я могу обнаружить движение Окна?
2 ответов
Я бы пошел с mghie комментарий: используйте таймер для анимации и активируйте/деактивируйте его с помощью обработчиков сообщений.
в вашем случае вы можете добавить следующие обработчики сообщений:
//fired when starting/ending a "move" or "size" window
procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;
procedure TForm.WMEnterSizeMove(var msg: TMessage);
begin
AnimationTimer.Enabled := false;
inherited;
end;
procedure TForm.WMExitSizeMove(var msg: TMessage);
begin
AnimationTimer.Enabled := true;
inherited;
end;
Я не пробовал это, но я бы сказал, что вы, вероятно, можете использовать WM_WINDOWPOSCHANGING, чтобы сказать, когда окно перемещается. http://msdn.microsoft.com/en-us/library/ms632653 (VS.85).aspx
код Delphi будет:
TSomeForm = class(TForm)
protected
...
procedure WindowPosChanging(var Msg : TMessage); message WM_WINDOWPOSCHANGING;
...
end;