Проблема, скорее всего, в том, что вы начинаете рисовать прямоугольники, пока модальная форма еще видна. В какой-то момент форма исчезает с экрана с прямоугольником на ней, и когда вы рисуете тот же прямоугольник, чтобы стереть предыдущий, он теперь на экране. Обратите внимание, что вызов «Свободный», «Скрыть» и т. Д. В форме не приведет к его немедленному скрытию.
(редактировать: это требует некоторого объяснения: форма будет скрыта до запуска следующей строки кода, но нет никакой гарантии относительно того, когда непокрытые окна обновят свои недействительные области ).
Решением будет Sleep
через некоторое время после закрытия модальной формы и до вызова AnimateRects
или, возможно, вызова Application.ProcessMessages
. Последнее, вероятно, не очень поможет, если модальная форма не полностью находится в окне вашего собственного приложения. И первое, вероятно, не очень поможет, если модальная форма находится над приложением, которое постоянно делает свой собственный рисунок в то же время. Как и диспетчер задач ф.и ...
edit: Хотя меня за это не одобряют, эта проблема как раз и объясняет, почему существует LockWindowUpdate
. Когда вы подумаете об этом, вы увидите, что то, что вы делаете, не отличается от того, что делает оболочка, когда она показывает контур перетаскивания окна при его перемещении (когда «показывать содержимое окна при перетаскивании» отключено) .