- •2. Визуальные компоненты
- •2.1. Свойства
- •2.2. События
- •2.3. Методы
- •If Edit1.CanFocus then Edit1.SetFocus; {перед получением фокуса производится проверка на возможность передачи фокуса компоненту}
- •3. Работа с текстом
- •3.1. Использование надписей
- •3.2. Однострочный редактор
- •3.3. Общие свойства, события и методы компонентов редактирования
- •3.4. Класс tStrings
- •3.5. Многострочный редактор
- •3.6. Использование списков
- •3.7. Таблица String Grid
- •4. Кнопки и переключатели
- •4.1. Работа с кнопками
- •4.1.1. Стандартная кнопка
- •4.1.2. Кнопка с рисунком
- •4.2. Работа с переключателями
- •4.2.1. Переключатель с независимой фиксацией
- •If CheckBox1.Checked then MessageDlg ('Время истекло! ', mtError, [mbОк], 0);
- •4.2.2. Переключатель с зависимой фиксацией
- •4.3. Объединение элементов управления
- •5. Использование форм
- •5.1. Свойства, методы и события форм
- •5.2. Организация взаимодействия форм
- •5.3. Особенности модальных форм
- •5.4. Шаблоны форм
- •5.5. Процедуры и функции, реализующие диалоги
- •5.6. Стандартные диалоги
- •If OpenDialog1.Execute then // при отмене диалога открытие файла не происходит
- •If SaveDialog1.Execute then { Получить имя файла }
- •6.Главное и контекстное меню, панели инструментов
- •6.1. Класс tMenuItem
- •6.2. Cоздание главного и контекстного меню
- •6.3. Динамическая настройка меню
- •6.4. Панели инструментов
- •7. Создание графических изображений
- •7.1. Классы для работы с графикой
- •7.2. Основные компоненты для размещения изображений
- •7.3. Типы графических объектов
- •7.4. Создание диаграмм
- •8. Печать объектов
- •8.1. Класс tPrinter
- •8.2. Печать текста
- •Var fPrn: Text; // объявлена переменная типа Text.
- •8.3. Диалоговые окна для работы с принтером
- •8.4. Печать графических изображений
- •8.4.1. Печать форм
- •8.4.2. Печать диаграмм
- •9. Работа с датами
- •9.1. Преобразование даты
- •9.2. Компоненты для ввода дат
- •10. Сохранение параметров программы.
- •Ini : tIniFile; //объявляем переменную типа inifile
- •Ini : tIniFile; //объявляем переменную типа inifile
- •11. Обработка исключительных ситуаций
- •Var f: File; begin AssignFile(f, 'Somefile.Ext'); try // оператор, в котором возможна ошибка Reset(f); // работы с файлом finally CloseFile(f) end;
Ini : tIniFile; //объявляем переменную типа inifile
begin
Далее мы должны создать файл, если его не существовало, или открыть его, если он уже есть:
ini := TInifile.Create(ExtractFilePath(Application.ExeName)+'my.ini');
Обратите внимание, что мы создаем файл в той же директории, откуда запущена программа. Если бы мы указали просто
ini := TInifile.Create('my.ini');
то файл был бы создан в директории Windows! Далее сохраним позицию окна, то есть свойства Left и Top формы:
//сохраняем позицию окна:
ini.WriteInteger('Position', 'L', Form1.Left);
ini.WriteInteger('Position', 'T', Form1.Top);
У ini-файла есть три процедуры для записи данных различных типов. WriteInteger, WriteString и WriteBool. Соответственно, эти функции записывают целое число, строку и логический тип. У этих функций есть по 3 параметра. Первый – это раздел ini – файла. В самом файле он выходит в квадратных скобках. Раздел вы можете назвать как угодно, не обязательно Position. Вторым параметром является название сохраняемого параметра, в примере этот параметр мы указали в виде букв 'L' и 'T', хотя можно было бы написать и 'Left', 'Top' или как-то иначе.
Третьим параметром функции является его значение. Поскольку свойства Left и Top формы имеют значения в виде целого числа, мы используем функцию для записи целых чисел WriteInteger. В результате приведенного примера в ini – файле появится надпись, подобная этой:
[Position]
L=14
T=50
Далее попробуем сохранить размеры формы (свойства Width и Height). Для этого в ini– файле создадим раздел Size:
//сохраняем размеры окна:
ini.WriteInteger('Size', 'W', Form1.Width);
ini.WriteInteger('Size', 'H', Form1.Height);
После того, как мы сохранили параметры в ini- файл, его необходимо закрыть:
//закрываем файл:
ini.Free;
Все, файл закрыт и настройки сохранены. Сохраните проект, откомпилируйте его и посмотрите, как он работает. Откройте созданный ini – файл, это простой текстовый файл, который вы сможете прочитать, и даже отредактировать.
Однако мы сделали только половину дела. Настройки то мы сохранили, а как их прочитать? Делается все это точно также, только наоборот. Вместо свойства разрушения формы используем свойство ее создания (onCreate), вместо записи используем чтение, и вместо того, чтобы значения свойств формы записывать в файл, мы будем читать их из файла и присваивать эти значения свойствам форм. Соответственно, мы имеем три процедуры считывания параметров из ini-файла: ReadInteger, ReadString и ReadBool.
Итак, делаем обработчик событий для формы onCreate:
{при создании формы}
procedure TForm1.FormCreate(Sender: TObject);
var
Ini : tIniFile; //объявляем переменную типа inifile
begin
//теперь создаем ее:
ini := TInifile.Create(ExtractFilePath(Application.ExeName)+'my.ini');
//применяем позицию окна:
Form1.Left := ini.ReadInteger('Position', 'L', 329);
Form1.Top := ini.ReadInteger('Position', 'T', 261);
//читаем размеры окна:
Form1.Width := ini.ReadInteger('Size', 'W', 384);
Form1.Height := ini.ReadInteger('Size', 'H', 312);
//закрываем файл:
ini.Free;
end;
Здесь интересен третий параметр в функциях записи. Казалось бы, значения нам не нужны, мы берем их из указанных разделов. Но третий параметр обязателен, в нем указывается значение "по умолчанию".
При создании формы придайте ей подходящий размер и положение и посмотрите значения свойств Left, Top, Width и Height. Эти значения вы и запишете в качестве принятых по умолчанию. Если файла еще не было или произошла какая-то ошибка при чтении данного параметра, например, не найдена нужная строка, будет применяться значение по умолчанию. Если же нужная строка прочитана, то будет применяться то значение, которое указано в ней.
Сохраните проект, откомпилируйте его и посмотрите, как работает программа. Полученный ini-файл будет содержать такой текст:
[Position]
L=329
T=261
[Size]
W=384
H=312
Попробуйте перед запуском программы изменить какой-нибудь параметр, например, укажите
L=0
Или даже
L=-100
Затем запустите программу, и посмотрите, как изменится положение окна! Кстати, это хороший способ прятать программу. Если вы для свойства Left укажите большее число, чем имеет свойство Width (ширина окна), и при этом сделаете число отрицательным, окно программы как бы сдвинется влево за пределы экрана. Программа запущена, ее видно в системной строке, а окна то и нет!
Сдвиньте окно рабочей программы и выйдите из нее. Снова запустите – положение окна, которое было последним, сохранилось!
Давайте продолжим программу и создадим строковый параметр. Установите на форму компонент Label, в свойстве Caption которого напишите: "Введите новый заголовок окна". Ниже установите компонент Edit, в него пользователь будет вводить текст. Еще ниже – кнопку с надписью "Применить".
Удалите текст из компонента Edit, в обработчике кнопки напишите следующее:
Form1.Caption := Edit1.Text;
Предполагается, что вы не меняли названий формы или Edit. Если же вы сменили имя формы, к примеру, на fMain, то напишите
fMain.Caption
Далее, перейдите в редактор кода. В процедуре разрушения формы onDestroy сразу после записи высоты формы, перед закрытием файла, добавьте строки:
//сохраняем заголовок формы:
ini.WriteString('Param', 'C', Form1.Caption);
А в процедуре onCreate, опять же, перед закрытием ini-файла, добавьте:
//читаем заголовок формы:
Form1.Caption := ini.ReadString('Param', 'C', 'Программа');
Как видите, работа со строками мало отличается от работы с числами! Сохраните проект, скомпилируйте и посмотрите, как он работает. Введите новое название окна, нажмите кнопку "Применить", выйдите из программы и снова откройте ее. Текст в системной строке программы должен сохраниться.
Теперь поработаем с логическим параметром. Установите на форму один CheckBox. В его свойстве Caption напишите "Параметр". Нам, собственно, не важно, какой именно параметр можно сохранить, например, разрешать ли нажатие на кнопку, разрешать ли показ формы "О программе", видимый или невидимый будет какой-то компонент… Параметров, которые вы, возможно, захотите сохранить, может быть очень много. Сейчас нам важно одно: свойство Checked компонента CheckBox может быть либо True (параметр включен), либо False (параметр выключен). Вот это нам и нужно сохранить в ini-файл, а затем считать это из него.
Перед закрытием ini-файла в процедуре события onDestroy запомним состояние флажка:
//запоминаем флажок:
ini.WriteBool('Param', 'CB1', CheckBox1.Checked);
Если флажок выключен, то вместо False в параметр ini-файла запишется 0. Если включен – запишется 1.
Теперь перед закрытием ini-файла в процедуре события onCreate добавим строки для считывания данных из ini-файла:
//читаем состояние флажка:
CheckBox1.Checked := ini.ReadBool('Param', 'CB1', True);
По умолчанию, флажок у нас будет включен. Комментарии, думаю, излишни. Старайтесь включать сохранение параметров в каждую вашу программу.