If WindowState=wsNormal then

begin
FIniFile.WriteInteger('Option', 'Width', Width);
FIniFile.WriteInteger('Option', 'Heigth', Height);
FIniFile.WriteInteger('Option', 'Left', Left);
FIniFile.WriteInteger('Option', 'Top', Top);

end;

FIniFile.WriteInteger('Option', 'WinState', Integer(WindowState));

FIniFile.Free; //Освобождаю реестр end;

После инициализации реестра и подготовки разделов я делаю проверку, в каком состоянии находится окно. Если WindowState равно wsNormal, то я сохраняю параметры окна. Если нет, то этого делать не надо. Если у тебя стоит разрешение экрана 800х600, по при максимизированном окне значение ширины окна будет 802, а высоты 602. Эти значения больше реального разрешения и если ты установишь их при загрузке, то изменить размеры окна мышкой будет очень трудно.

После этого я сохраняю состояние окна -WindowState. Так как оно имеет тип ТWindowState, то мне приходится приводить этот тип к Integer с помощью Integer(WindowState).

Процедура LoadProgParam работает таким же образом: