Практическое занятие № 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 создана вновь.