It shouldn't be needed and I'm not sure it will help but add:
Application.ProcessMessages;
at the end of the procedure and see if it helps. If it does, something may be wrong in the WindowsState setter.
Form1.Fullscreen := True
given my experience with Lazarus so far ^^ Maybe a worthy addition to the LCL?
This version is better for windows (remembers window dimensions and position):