Типичный способ, рекомендуемый первым, это вызов LockWindowUpdate. Что есть в корне неверно - в Майкрософт не очень удобно выбрали название функции.
http://www.transl-gunsmoker.ru/2010/12/lockwindowupdate_29.html
http://msdn.microsoft.com/en-us/library/dd145034%28v=vs.85%29.aspx
Правильный пример:
procedure SetWindowLock(AHandle: THandle); begin SendMessage(AHandle, WM_SETREDRAW, 0, 0); end; procedure EndWindowLock(AHandle: THandle); begin SendMessage(AHandle, WM_SETREDRAW, 1, 0); RedrawWindow(AHandle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); end;
Хитрость в том, что работает только RedrawWindow, а Invalidate нет.
UPD
На практике оказало не все так весело - окно просто прячется, а не перестает отрисовываться. У нас решилось точечным применением, только к изменяемым элементам - панелям, таб сетам и т.п.