Пусть нужно, чтобы формы приложения запоминали свое расположение, размер, введенные и выбранные в элементах управления данные. В таком случае необходимость в сотый раз перетаскивать часто открываемую форму на удобное место не будет раздражать пользователя. Если же форма требует постоянного ввода похожих данных, то восстановление выбранных и введенных в прошлый раз значений будет только плюсом.
Теперь о деле: есть форма для фильтрации запроса к базе данных, она показанна на рис. 7.7.
Рис. 7.7. Форма фильтра для поиска товара
Содержимое формы не суть важно, а важно то, что при нажатии кнопки ОК положение, размер формы, а также данные, введенные пользователем, будут сохранены в реестре при помощи процедуры SaveFilter (листинг 7.14).
Листинг 7.14.
Сохранение параметров формы в реестре
procedure TForm1.OKClick(Sender: TObject);
begin
SaveFilter();
//Выполняем требуемые действия…
end;
//Процедура сохраняет параметры в реестр
procedure TForm1.SaveFilter();
var
reg: TRegistry; //По умолчанию: RootKey = HKEY_CURRENT_USER
strShops: String;
i: Integer;
begin
reg := TRegistry.Create();
try
//Открываем или создаем раздел, в котором будут
//сохранены параметры формы
reg.OpenKey(strBaseKey + \'\Form1\', True);
//Сохранение параметров
//1. Размер и положение формы
reg.WriteInteger(\'Width\', Width);
reg.WriteInteger(\'Height\', Height);
reg.WriteInteger(\'Top\', Top);
reg.WriteInteger(\'Left\', Left);
//2. Последнее введенное наименование
reg.WriteString(\'txtName.Text\', txtName.Text);
//3. Выбранные магазины
strShops := \'\
for i := 0 to lstShops.Count–1 do
if lstShops.Selected[i] then
strShops := strShops + lstShops.Items[i] + \',\
reg.WriteString(\'lstShops.Selection\', strShops);
//4. Применение сортировки
reg.WriteBool(\'chkSort.Checked\', chkSort.Checked);
except
on ERegistryException do
MessageBox(Handle, \'Ошибка при сохранении фильтра\',
\'Поиск товара\', MB_ICONEXCLAMATION)
;
end;
reg.CloseKey();
reg.Free();
end;
В рассматриваемом примере константа strBaseKey, определяющая положение раздела для сохранения настроек, задана следующим образом:
const
strBasekey = \'Software\Delphi. Трюки и эффекты\Настройки программы\
Открыв Редактор реестра, можно удостовериться в правильном сохранении требуемых нам параметров (рис. 7.8).
Рис. 7.8. Параметры формы, записанные в реестр
Считывание параметров формы можно производить, например, при ее создании. Тогда в обработчике события Create достаточно поместить вызов процедуры LoadFilter (листинг 7.15).