Сохранение размеров, позиции и состояния окна
Приведу код WindowRestorer - восстановителя размера и состояния окна.
ОПИСАНИЕ: Вы наверное замечали, что профессионально написанные программы "запоминают" состояние и позицию окон с момента их последнего показа? А большинство RAD-приложений это игнорируют? Вы можете исправить эту ошибку, взяв на вооружение этот модуль. Он позволяет сохранять позицию, размер и состояние окна, поэтому пользователь, открыв его вновь, увидит его в том же состоянии, в котором он видел его в последний раз.
ИСПОЛЬЗОВАНИЕ: Поместите WINRSTOR в список используемых модулей главной или любой другой формы, состояние, размер и позицию которой вы хотите сохранить. (Если вы сэкономить время и для восстановления дочерних форм использовать WinSaveChildren и WinRestoreChildren из главной формы, вы должны объявить этот модуль только в главной форме.)
В MainForm.Create, инициализируйте глобальный объект WinRestorer следующим образом (он должен предварительно быть объявлен, но еще не инициализирован):
 
Или так:
 
Затем в MainForm.Destroy вы должны разрушить глобальный объект WinRestorer следующим образом:
GlobalWinRestorer.free;
Хорошее место для сохранения статуса формы - в обработчике события queryclose или в специально созданной кнопке или пункте меню. Я обычно создаю этот пункт в меню "Файл" с именем '&Сохранение рабочей области' и обрабатываю следующим образом:
 
И при закрытии основной формы необходимо сделать следующее:
 
Восстановить состояние дочерних форм можно следующим образом:
 
Я же переместил данный код в обработчик события show моей главной формы:
 
Подсказки: Если вы установили TForm.Position в poScreenCenter или что-то подобное, данный модуль вам не поможет. poDesigned кажется, работает как положено. Можно добавить обработку исключения, если вы пытаетесь установить верхнюю или левую позицию при значении формы poScreenCentere, но при этом вы должны быть осторожными при использовании WinRestoreChildren. Я не проверял это со значениями координат (позиции) и оставил это на усмотрение разработчиков.
unit  WinRstor;
INTERFACE
USES SysUtils,  Forms;
TYPE {=============================================================}
{------------------------------------------------------------------
Восстановитель  окон классовых объектов и связанных  типов.
-------------------------------------------------------------------}
EWinRestorer  = class( Exception);
TWhatSave = (default, size, location,  state);
STWhatSave = set of TWhatSave;
TWinRestorer =  class(TObject)
 
 
CONST
 
VAR
GlobalWinRestorer:  TWinRestorer;
IMPLEMENTATION
Uses  IniFiles;
constructor TWinRestorer.create;
var fname,  path: string[100];
begin
 
 
 
 
end;
procedure  TWinRestorer.RestoreWin;
var FormNm, SectionNm:  string[80];   ini: TIniFile;
 
 
 
 
procedure  TWinRestorer.RestoreChildren;
var i: integer;
begin
 
procedure  TWinRestorer.SaveWin;
var FormNm, SectionNm: string[80];   w : STWhatsave; ini: TIniFile;
begin
 
procedure  TWinRestorer.SaveChildren;
var i: integer;
begin
 
INITIALIZATION
END. 
