Практическое занятие № 14
Тема: "Создание программ с настраиваемыми параметрами через реестр Windows"
Цель занятия: получить практические навыки по созданию настраиваемых интерфейсов с помощью реестра
Ход работы
Создать форму регистрации вида:

При щелчке на кнопке поля проверяются на наличие текста. Если поля заполнены, то проверяется пароль (11111). Если пароль верный, то открывается вторая форма работы с текстом. Если пароль не верный, то выдается сообщения, наращивается счетчик неверных попыток.
Если число неверных попыток равно 5, то в раздел реестра HKEY_CURRENT_USER в ветви Software\MyProgram записывается ключ в виде:
Key=1
и программа завершает свою работу.
Ключ Key является признаком неверного ввода пароля. Если Key=1, то программа не запускается, если 0 - то запускается.
Указания: для формы задайте свойства: BorderStyle = bsDialog, BorderIcons-biSystem = false (скрываем кнопку закрытия окна), Caption = Регистрация, Name = frmLogin, Position = poDesktopCenter.
На форме разместите два компонента Label (Standard) и в свойстве Caption укажите соответствующие тексты надписей.
На форме разместите два компонента Edit (Standard). Очистите свойство Text. Для второго поля задайте свойства: MaxLength=8 (максимальная длина), PasswordChar=* (ввод пароля).
Разместите на форме компонент Button (Standard) и в свойстве Caption задайте текст надписи на кнопке.
Для работы с реестром подключите модуль Registry и опишите глобальную переменную:
reg:TRegistry;
Для подсчета количества неверных попыток ввода пароля в модуле формы опишите глобальную переменную:
k:integer=0;
Для кнопки напишем код вида:
procedure TfrmLogin.Button1Click(Sender: TObject);
begin
//если поле Логин не заполнено
if Edit1.Text='' then
begin
Edit1.SetFocus;
Exit;
end;
//если поле Пароль не заполнено
if Edit2.Text='' then
begin
Edit2.SetFocus;
Exit;
end;
//если пароль верный (11111)
if Edit2.Text='11111' then
begin
//скрываем форму регистрации
Hide;
//создаем и отображаем форму работы с текстом
frmEdit:=TfrmEdit.Create(nil);
frmEdit.Show;
frmEdit.Repaint;
end
//если пароль не верный
else
begin
//выдаем сообщение
Application.MessageBox('Пароль не верный','Ошибка регистрации',mb_ok+mb_iconerror);
//ставим курсор в поле пароля для повторного ввода
Edit2.SetFocus;
//наращиваем счетчик неверных попыток
k:=k+1;
//если количество попыток ровно 5
if k=5 then
begin
//выдаем сообщение
Application.MessageBox('Вы сделали 5 неудачных попыток. Программа будет закрыта',
'Ошибка регистрации',
mb_ok+mb_iconerror);
//создаем переменную для работы с реестром
reg:=TRegistry.Create;
//указываем раздел реестра
reg.RootKey:=HKEY_CURRENT_USER;
//открываем ветку реестра
reg.OpenKey('Software\MyProgram',true);
//записываем параметр блокирования запуска программы (key=1)
reg.WriteInteger('Key',1);
//закрываем программу
Close;
end;
end;
end;
Для работы формы регистрации должна быть создана форма frmEdit (см. следующий пункт).
Создайте форму для работы с текстом вида:

С помощью выпадающих списков можно отформатировать текст в поле Memo1 и цвет фона поля Memo1.
Флажок на форме показывает, нужно ли отображать форму-заставку при запуске.
Кнопка Применить сохраняет все настройки в реестре в разделе в ветке Software\MyProgram. При этом ключи имеют имена, которые совпадают с именами свойств соответствующих компонентов.
Указания: С помощью кнопки New Form создайте новую форму и задайте свойства: Caption = Работа с реестром, Name = frmEdit.
Форма будет создаваться динамически, поэтому выполните команду Project - Options и перенесите форму из списка Aut-Create Forms в список Available Forms.
Для удаления динамической формы из памяти в событии OnClose формы введите команду:
procedure Tfrmedit.Formclose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
На форму добавьте компонент Panel (Standard) и задайте свойства: Align = alRight, Caption=Очистить.
На панели разместите четыре компонента Label (Standard) и в свойстве Caption введите тексты надписей.
На панели разместите два компонента ComboBox. Для первого ComboBox задайте свойство Text = MS Sans Serif. Для второго ComboBox задайте свойства: в свойстве Items введите произвольные размеры символов текста, Text = первая цифра в вашем перечне.
Первый ComboBox должен заполняться списком доступных шрифтов Windows. Для этого в событии OnCreate формы вставьте команду:
procedure TfrmEdit.Formcreate(Sender: Tobject);
begin
//загружаем в первый ComboBox список шрифтов Windows
ComboBox1.Items:=Screen.Fonts;
end;
На панели разместите два компонента ColorBox (Additional). Для первого компонента задайте свойство Selected = clBlack. Для второго компонента задайте свойство Selected = clWindow.
На панели разместите компонент CheckBox (Standard) и задайте свойства: Caption = надпись возле флажка, Checked = true.
На панели разместите компонент Button (Standard) и задайте свойство: Caption = надпись на кнопке.
На форме разместите компонент Memo (Standard) и задайте свойства: Lines очистить, Align = alClient.
Для работы с реестром подключите модуль registry и опишите глобальную переменную:
reg:TRegistry;
При выборе параметров с помощью выпадающих списков должны меняться параметры компонента Memo1.
Для компонента ComboBox1 в событии OnChange вставить код:
procedure Tfrmedit.Combobox1Change(Sender: TObject);
begin
//применяем выбранный шрифт к тексту
Memo1.Font.Name:=ComboBox1.Text;
end;
Для компонента ComboBox2 в событии OnChange вставить код:
procedure Tfrmedit.Combobox2Change(Sender: TObject);
begin
//применяем выбранный размер к тексту
Memo1.Font.Size:=strtoint(ComboBox2.Text);
end;
Для компонента ColorBox1 в событии OnChange вставить код:
procedure Tfrmedit.Colorbox1Change(Sender: TObject);
begin
//применяем выбранный цвет к тексту
Memo1.Font.Color:=ColorBox1.Selected;
end;
Для компонента Colorbox2 в событии OnChange вставить код:
procedure Tfrmedit.Colorbox2Change(Sender: TObject);
begin
//применяем выбранный цвет к фону компонента Memo1
Memo1.Color:=ColorBox2.Selected;
end;
При щелчке на кнопке все параметры должны сохраняться в реестре в разделе HKEY_CURRENT_USER в ветке Software\MyProgram. При этом ключи имеют имена, которые совпадают с именами свойств соответствующих компонентов.
Для кнопки напишем код:
procedure TfrmEdit.Button1Click(Sender: TObject);
begin
//создаем переменную для работы с реестром
reg:=TRegistry.Create;
//указываем раздел реестра
reg.RootKey:=HKEY_CURRENT_USER;
//открываем ветку реестра
reg.OpenKey('Software\MyProgram',true);
//в реестр сохраняем параметры выпадающих списков
reg.WriteString('Memofontname',ComboBox1.Text);
reg.WriteInteger('Memofontsize',strtoint(ComboBox2.Text));
reg.WriteInteger('Memofontcolor',ColorBox1.Selected);
reg.WriteInteger('Memocolor',ColorBox2.Selected);
//в реестр сохраняем состояние флажка
reg.WriteBool('Checkbox1',checkbox1.checked);
//удаляем из памяти созданную сменную
reg.Free;
end;
При закрытии формы редактирования текста нужно завершать работу программы (в памяти остается скрытая главная форма frmLogin. Кроме этого в реестр нужно сохранить размер и положение формы на экране. При этом имена ключей совпадают с именами свойств формы.
Указания: В событии OnClose формы frmEdit добавьте код:
//создаем переменную для работы с реестром
reg:=TRegistry.Create;
//указываем раздел реестра
reg.RootKey:=HKEY_CURRENT_USER;
//открываем ветку реестра
reg.OpenKey('Software\MyProgram',true);
//записываем параметры размера и положение формы в реестр
//ширину, высоту, положение по Х и Y
reg.WriteInteger('Width',Width);
reg.WriteInteger('Height',Height);
reg.WriteInteger('X',Left);
reg.WriteInteger('Y',Top);
//удаляем из памяти созданную переменную
reg.Free;
//закрываем главную форму проекта (завершаем работу программы)
frmLogin.Close;
При открытии формы для работы с текстом нужно прочитать все параметры из реестра и применить их к соответствующим компонентам.
Указания: В событии OnCreate формы frmEdit добавьте код:
//создаем переменную для работы с реестром
reg:=TRegistry.Create;
//указываем раздел реестра
reg.RootKey:=HKEY_CURRENT_USER;
//открываем ветку реестра
reg.OpenKey('Software\MyProgram',true);
//считываем параметры формы из реестра
//ширину, высоту, положение по Х и Y
//если параметр Width существует
if reg.ValueExists('Width')=true then
Width:=reg.ReadInteger('Width');
//если параметр Height существует
if reg.ValueExists('Height')=true then
Height:=reg.ReadInteger('Height');
//если параметр X существует
if reg.ValueExists('X')=true then
Left:=reg.ReadInteger('X');
//если параметр Y существует
if reg.ValueExists('Y')=true then
Top:=reg.ReadInteger('Y');
//в выпадающие списки считываем сохраненные параметры
//если параметр Memofontname существует
if reg.ValueExists('Memofontname')=true then
ComboBox1.Text:=reg.ReadString('Memofontname');
//если параметр Memofontsize существует
if reg.ValueExists('Memofontsize')=true then
ComboBox2.Text:=inttostr(reg.ReadInteger('Memofontsize'));
//если параметр Memofontcolor существует
if reg.ValueExists('Memofontcolor')=true then
ColorBox1.Selected:=reg.ReadInteger('Memofontcolor');
//если параметр Memocolor существует
if reg.ValueExists('Memocolor')=true then
ColorBox2.Selected:=reg.ReadInteger('Memocolor');
//к полю Memo применяем параметры из выпадающих списков
Memo1.Font.Name:=ComboBox1.Text;
Memo1.Font.Size:=strtoint(ComboBox2.Text);
Memo1.Font.Color:=ColorBox1.Selected;
Memo1.Color:=ColorBox2.Selected;
//считываем сохраненное состояние флажка
//если параметр Checkbox1 существует
if reg.ValueExists('Checkbox1')=true then
CheckBox1.Checked:=reg.ReadBool('Checkbox1');
//удаляем из памяти созданную переменную
reg.Free;
Создайте форму-заставку
Указания: С помощью кнопки New Form создайте новую форму и задайте свойства: BorderStyle = bsNone, Name = frmZast, Position = poDesktopCenter.
На форму нанесите компонент Image (Additional) и задайте свойства: Align = alClient, Picture = файл зображення, Stretch=true.
Форма будет создаваться динамически, поэтому выполните команду Project - Options и перенесите форму из списка Aut-Create Forms в список Available Forms.
Для удаления динамической формы из памяти в событии OnClose формы введите команду:
Action:=caFree;
Перед запуском основной программы нужно выполнить ряд действий:
- если ключ Key в реестре равен 0, то программа запускается, иначе - выдается сообщение и программа не запускается;
- если флажок отображения формы- заставки включен, то при запуске отображается форма-заставка.
Указания: Все перечисленные операции нужно выполнить перед запуском основной программы. Весь код будем писать в файле проекта.
Выполните команду Project - View Source.
Для работы с реестром подключите модуль registry и перед ключевым словом begin опишите переменную:
var reg:TRegistry;
Для создания паузы при показе формы-заставки подключите модуль windows.
После ключевого слова begin введите код:
//создаем переменную для работы с реестром
reg:=TRegistry.Create;
//указываем раздел реестра
reg.RootKey:=HKEY_CURRENT_USER;
//открываем ветку реестра
reg.OpenKey('Software\MyProgram',true);
//считываем из реестра значение параметра Key
//если параметр Key существует
if reg.ValueExists('Key')=true then
//если Key=1 (запуск запрещен)
if reg.ReadInteger('Key')=1 then
begin
//выдаем сообщение о невозможности запуска
Application.MessageBox('Вы превысили допустимое число попыток ввода',
'Ошибка регистрации',
mb_ok+mb_iconerror);
//завершаем работу программы
ExitProcess(0);
end;
//читаем из реестра состояние флажка отображения формы-заставки
//если параметр Checkbox1 существует
if reg.ValueExists('Checkbox1')=true then
//если флажок = true (включен)
if reg.ReadBool('Checkbox1')=true then
begin
//создаем и отображаем форму-заставку
frmZast:=TfrmZast.Create(nil);
frmZast.Show;
frmZast.Repaint;
//делаем паузу для просмотра формы-заставки
Sleep(3000);
end;
Для закрытия файла- заставки перед командой Application.Run вставьте команду:
frmZast.Free;
Запустите программу. Проверьте блокирование запуска программы при пяти неверных попытках ввода пароля.
Для разблокирования запуска программы нужно открыть редактора реестра. Для этого выполните команду Пуск - Выполнить. В окне введите команду regedit и щелкните ОК. В разделе HKEY_CURRENT_USER откройте ветку Software\MyProgram, в правой части окна двойным щелчком откройте параметр Key и присвойте ему значение 0 (или удалите его клавишей Delete).
В окне редактора реестра клавишей Delete удалите ветку Software\MyProgram, запустите программу и убедитесь, что форма приняла все параметры по умолчанию. Выполните произвольную настройку, щелкните на кнопке Применить, выйдите из программы и убедитесь, что ветка Software\MyProgram создана вновь.