Практическое занятие № 13

Тема: "Создание программ с настраиваемыми параметрами с помощью INI файлов"

Цель занятия: получить практические навыки по созданию настраиваемых интерфейсов с помощью INI файлов

 

Ход работы

 

Создать форму регистрации вида:

 

 

 

При щелчке на кнопке поля проверяются на наличие текста. Если поля заполнены, то проверяется пароль (11111). Если пароль верный, то открывается вторая форма для работы с текстом. Если пароль не верный, то выдается сообщение и наращивается счетчик неверных попыток.

Если число неверных попыток ровно 5, то в INI файл "settings.ini" записывается ключ в виде:

 

[Zapusk]

 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 задайте текст надписи на кнопке.

 

Для работы с INI файлом подключите модуль IniFiles и опишите глобальную переменную:

 

ini:TINIFile;

 

Для подсчета количества неверных попыток ввода пароля в модуле формы опишите глобальную переменную:

 

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);

            //создаем сменную для работы по INI файлом

            ini:=TINIFile.Create(extractfilepath(Application.EXEName)+'\settings.ini');

            //записываем параметр блокирования запуска программы (key=1)

            //раздел - Zapusk, ключ - Key, значение - 1

            ini.WriteInteger('Zapusk','Key',1);

            //закрываем программу

            Close;

        end;

    end;

end;

 

Для работы формы регистрации должна быть создана форма frmEdit.

 

Создайте форму для работы с текстом вида:

 

 

С помощью выпадающих списков можно отформатировать текст в поле Memo1 и цвет фона поля Memo1.

Флажок на форме показывает нужно ли отображать форму-заставку при запуске программы.

Кнопка "Применить" сохраняет все настройки в INI файл. При этом раздел называется "Components", а ключи имеют имена, которые совпадают с именами соответствующих компонентов.

 

Указания: С помощью кнопки New Form создайте новую форму и задайте свойства: Caption = Работа по INI, Name = frmEdit.

Форма будет создаваться динамически, поэтому выполните команду Project - Options и перенесите форму из списка Auto-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.

 

Для работы с INI файлом подключите модуль inifiles и опишите глобальную сменную:

 

ini:TINIFile;

 

При выборе параметров с помощью выпадающих списков должны меняться параметры компонента 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;

 

 При щелчке на кнопке все параметры должны сохраняться в INI файл.  При этом раздел называется "Components", а ключи имеют имена, которые совпадают с именами соответствующих компонентов.

Для кнопки напишем код:

 

procedure TfrmEdit.Button1Click(Sender: TObject);

begin

    //создаем переменную для работы по INI файлом

    ini:=TINIFile.Create(extractfilepath(Application.ExeName)+'\settings.ini');

 

    //в INI файл сохраняем параметры выпадающих списков

    ini.WriteString('Components','Memofontname',ComboBox1.Text);

    ini.WriteInteger('Components','Memofontsize',strtoint(ComboBox2.Text));

    ini.WriteInteger('Components','Memofontcolor',ColorBox1.Selected);

    ini.WriteInteger('Components','Memocolor',ColorBox2.Selected);

 

    //в INI файл сохраняем состояние флажка

    ini.WriteBool('Components','Checkbox1',CheckBox1.Checked);

 

    //удаляем из памяти созданную переменную

    ini.Free;

end;

 

При закрытии формы редактирования текста нужно завершать работу программы (в памяти остается скрытая главная форма frmLogin. Кроме этого в файле INI нужно сохранить размер и положение формы на экране. При этом имя раздела называется "Form", а имена ключей совпадают с именами свойств формы.

 

Указания: В событии OnClose формы frmEdit добавьте код:

 

     //создаем переменную для работы по INI файлом

    ini:=TINIFile.Create(extractfilepath(Application.ExeName)+'\settings.ini');

 

    //записываем параметры размера и положение формы в INI файл

    //ширину, высоту, положение по Х и Y

    ini.WriteInteger('Form','Width',Width);

    ini.WriteInteger('Form','Height',Height);

    ini.WriteInteger('Form','Left',Left);

    ini.WriteInteger('Form','Top',Top);

 

    //удаляем из памяти созданную переменную

    ini.Free;

 

    //закрываем главную форму (завершаем работу программы)

    frmLogin.Close;

 

При открытии формы для работы с текстом нужно прочитать все параметры с INI файла и применить их к соответствующим компонентам.

 

Указания: В событии OnCreate формы frmEdit добавьте код:

 

    //создаем переменную для работы по INI файлом

    ini:=TINIFile.Create(extractfilepath(Application.ExeName)+'\settings.ini');

 

    //считываем параметры формы из INI файла

    //ширину, высоту, положение по Х и Y

    Width:=ini.readinteger('Form','Width',Width);

    Height:=ini.readinteger('Form','Height',Height);

    Left:=ini.readinteger('Form','Left',Left);

    Top:=ini.readinteger('Form','Top',Top);

 

    //в выпадающие списки считываем сохраненные параметры

    ComboBox1.Text:=ini.ReadString('Components','Memofontname','MS Sans Serif');

    Combobox2.Text:=inttostr(ini.ReadInteger('Components','Memofontsize',12));

    ColorBox1.Selected:=ini.ReadInteger('Components','Memofontcolor',clBlack);

    ColorBox2.Selected:=ini.ReadInteger('Components','Memocolor',clWindow);

 

    //применяем считанные значения из списков к параметрам Memo поля

    Memo1.Font.Name:=ComboBox1.Text;

    Memo1.Font.Size:=strtoint(ComboBox2.Text);

    Memo1.Font.Color:=ColorBox1.Selected;

    Memo1.Color:=ColorBox2.Selected;

 

    //считываем сохраненное состояние флажка

    CheckBox1.Checked:=ini.ReadBool('Components','Checkbox1',true);

 

    //удаляем из памяти созданную переменную

    ini.free;

 

Создайте форму-заставку

 

 Указания: С помощью кнопки New Form создайте новую форму и задайте свойства: BorderStyle = bsNone, Name = frmZast, Position = poDesktopCenter.

На форму нанесите компонент Image (Additional) и задайте свойства: Align = alClient, Picture = файл изображения, Stretch = true.

Форма будет создаваться динамически, поэтому выполните команду Project - Options и перенесите форму из списка Auto-Сreate Forms в список Available Forms.

Для удаления динамической формы из памяти в событии OnClose формы введите команду:

 

Action:=caFree;

 

Перед запуском основной программы нужно проверить значению ключа Key в INI файле.

Если ключ Key в равен 0, то программа запускается, иначе - выдается сообщения и программа не запускается.

Если программа запускается, то далее проверяем значение сохраненного в INI файл флажка отображения формы-заставки. Если он включен, то заставка отображается, иначе – не отображается.

 

Указания: Все перечисленные операции нужно выполнить перед запуском основной программы. Весь код будем писать в файле проекта.

Выполните команду Project - View Source.

 

 Для работы с INI файлом подключите модули IniFiles, SysUtils ,Windows.

 

IniFiles - для работы с Ini файлами

SysUtils - для использования функции ExtractFilePath

Windows - для вызова функции Sleep (пауза для формы-заставки) и диалогового окна Application.MessageBox

 

Перед ключевым словом begin опишите переменную:

 

var ini:TINIFile;

 

После ключевого слова begin введите код:

 

//создаем переменную для работы с INI файлом

ini:=TINIFile.Create(extractfilepath(Application.ExeName)+'\settings.ini');

//считываем значение параметра Key

//если Key=1 (запуск запрещен)

if ini.ReadInteger('Zapusk','Key',0)=1 then

begin

    //выдаем сообщение о невозможности запуска

    Application.MessageBox('Вы превысили допустимое число попыток регистрации',

                           'Блокировка',

                           mb_ok+mb_iconerror);

    //завершаем работу программы

    exitprocess(0);

end;

 

//читаем из INI файла состояние флажка отображения формы-заставки

//если флажок = true (включен)

if ini.ReadBool('Components','Checkbox1',true)=true then

begin

    //создаем и отображаем форму-заставку

    frmZast:=TfrmZast.Create(nil);

    frmZast.Show;

    frmZast.Repaint;

    //делаем паузу для просмотра формы-заставки

    sleep(3000);

end;

 

Для закрытия файла- заставки перед командой Application.Run вставьте команду:

 

frmZast.Free;

 

Запустите программу на выполнение. Проверьте блокирование запуска программы при пяти неверных попытках ввода пароля.

Для разблокирования запуска программы нужно открыть файл "settings.ini" и установить ключ Key=0 или удалить ключ Key.

 

Удалите файл "settings.ini", запустите программу и убедитесь, что форма приняла все параметры по умолчанию. Выполните произвольную настройку, щелкните на кнопке Применить, выйдите из программы и убедитесь, что файл "settings.ini" создан вновь.