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