Урок16. Ini файлы
Для хранения некоторых данных, например параметров программы, как это было рассмотрено в предыдущем уроке, для последующего их использования можно применять реестр или ini файлы. Я имею в виду хранение установок программы во время бездействия программы, чтобы при последующем запуске, она восстанавливала свое состояние. В ini файлах можно также хранить и скрытые от пользователя данные, такие как серийный номер программы, срок истечения лицензии, закодированные пароли на запуск и пр. Такие данные естественно не защищены от постороннего вмешательства, но при умелом использовании кодирующих средств, можно исключить ручное редактирование этих параметров. TIniFile является низкоуровневым 16-битным классом, совместимым с операционной системой windows 3.x файловой системы хранения параметров в INI файлах. Для хранения параметров в современных программах рекомендуется использовать реестр. Но, как правило, не так просто такую программу скопировать на другой компьютер с переносом всех настроек, а совместное копирование ini файла избавит вас от такой проблемы. Объявление переменной, в которую будем заносить (или читать) данные: Var IniFile: TIniFile; где: IniFile - любой идентификатор, который будет использоваться в программе. Можно, например, для сокращения просто i. IniFile:= TIniFile.Create('Название_файла'); где: Название_файла - файл, в котором будут храниться данные. Если вы напишите, например project.ini без указания пути к файлу, то такой файл создастся или будет читаться из каталога WINDOWS. Для размещения ini файла в каталоге программы, или относительно его (например КАТАЛОГ_ПРОГРАММЫ\INI) указывайте вместе с названием файла текущий каталог программы. IniFile.Free; В промежутке между созданием и уничтожением переменной IniFile находятся команды чтения (записи) параметров. [windows] [Desktop] [Intl] Строка, заключенная в квадратные скобки [] называется заголовком секции, и все данные между двумя заголовками являются секцией. В одной секции может быть только один уникальный параметр, т.е. название параметров в секции не должны повторяться дважды. После названия параметра следует знак равенства, после которого сама хранимая величина. Чтение параметров: Все команды чтения параметров являются функциями, т.е. сами возвращают требуемые значения. ПЕРЕМЕННАЯ_Integer:=IniFile.ReadInteger(СЕКЦИЯ,ПАРАМЕТР,ЗНАЧЕНИЕ_ПО_УМОЛЧАНИЮ); где: СЕКЦИЯ и ПАРАМЕТР - строковые значения. На из месте можно писать как саму строковую величину, например 'MAINPARAM', так и подставлять строковую переменную. ReadString - чтение строковой переменной Запись параметров: Все команды записи параметров являются процедурами. Они не возвращают никаких параметров, и, в случае неудачной попытки записи, программа выдает сообщение об ошибке. IniFile.WriteInteger(СЕКЦИЯ,ПАРАМЕТР,ЗАПИСЫВАЕМАЯ_ВЕЛИЧИНА); Далее для записи других типов данных: WriteString - запись строковой переменной Рассмотрим пример. Создаем новый проект, в форму Form1 помещаем компоненты Edit, ComboBox, два компонента CheckBox, две кнопки BitBtn. Для компонента ComboBox1 изменяем свойство Style в csDropDownList и редактируем свойство Items, занося туда несколько произвольных строк. Дальше для BitBtn1 свойство Caption изменяем на Сохранить, а для кнопки BitBtn2 - Восстановить. Окно принимает вид, показанный на рисунке. В процедуре события FormCreate для окна Form1 пишем команду ReadParams; В процедуре события FormClose для окна Form1 пишем команду WriteParams; В процедуре нажатия на кнопку "Сохранить" аналогично закрытию окна команда WriteParams, для кнопки "Восстановить" - ReadParams. Дальше привожу текст модуля Unit1 обратите внимание на выделенные строки. Их следует прописать вручную. // ----------------Начало модуля Unit1------------------ unit Unit1; interface uses type var implementation {$R *.DFM} procedure TForm1.ReadParams; procedure TForm1.WriteParams; procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); procedure TForm1.BitBtn1Click(Sender: TObject); procedure TForm1.BitBtn2Click(Sender: TObject); end. // ----------------Конец модуля Unit1------------------ Вышерассмотренный пример можно забрать по этой ссылке (2 Кб). Запустите программу несколько раз и проследите за восстановлением внешнего вида программы. Попробуйте сохранять и восстанавливать параметры с помощью кнопок. Для нашего примера создается файл project.ini, который находится в каталоге WINDOWS. Просмотрите его содержимое. У меня он получился такой. [FORM1] Если у вас в программе несколько окон, параметры которых необходимо сохранять все в том же окне, то используйте различные секции с названиями соответствующих окон, например программа с двумя окнами будет "запоминать" свое состояние следующим образом: [FORM1] [FORM2] Итак, файл project.ini пишется и читается в каталоге WINDOWS. Следующий пример позволяет построить путь к файлу ini относительно каталога, где находится ваша запущенная программа. Этот кусок программы помещается до создания IniFile, и еще необходимо объявить строковую переменную Path. Var Path:String; // Переменная, где будет храниться путь к программе Теперь ini файл лежит недалеко от запускаемой программы. С уважением, ведущий уроков Semen semen@krovatka.net
|