Краткие сведения

Удобным средством запоминания текущих настроек приложения являются ini-файлы. Ini-файлы-это текстовые файлы, предназначенные для хранения информации о формах или о настройках различных приложений. Информация в файле логически группируется в разделы, каждый из которых начинается оператором заголовка, заключенным в квадратные скобки, например,[Desktop]. В строках, следующих за заголовком, содержится информация, относящаяся к данному разделу, в виде:

<ключ>=<значение>

Любое приложение можно зарегистрировать в системном реестре и зафиксировать там же текущие настройки приложения (в 32-разрядных Windows и выше). Для 32-разрядных приложений Microsoft не рекомендует работать с Ini-файлами. Ннесмотря на это, и 32-разрядные приложения, наряду с реестром, часто используют эти файлы. Да и разработки Microsoft не обходятся без этих файлов.

Ini-файлы, как правило, хранятся в каталоге Windows, который можно найти с помощью функцииGetWindowsDirectory.

В Delphi работу с Ini-файламипроще всего осуществлять с помощью создания в приложении объекта типаTIniFile. Этот тип описан в модулеIniFiles, который надо подключать к приложению операторомuses (автоматически это не делается).

Создается объект типаTIniFile методомСгеаtе(<имя файла>), в который передается имя Ini-файла, с которым он связывается.

Для записи значений ключей существует несколько методов:WriteString, WriteInteger, WriteFloat, WriteBool и др. Каждый из них записывает значение соответствующего типа. Объявления всех этих методов очень похожи. Например:

procedure WriteString (const Section, Ident, Value: string);

procedure WriteInteger(const Section, Ident: string; Value: Longint);

Здесь Section — раздел Ini-файла,Ident — имя ключа, Value — значение ключа. Если соответствующий раздел или ключ отсутствует в файле, он автоматически создается.

Имеются аналогичные методы чтения значений ключей:ReadString, ReadInteger, ReadFloat, ReadBool и др. Например:

function ReadString(const Section, Ident, Default: string): string;

function ReadInteger(const Section, Ident: string; Default: Longint): Longint;

В этих примерах методы чтения возвращают значение ключаIdent разделаSection. ПараметрDefaultопределяет значение, возвращаемое в случае, если в файле не указано значение соответствующего ключа.

Проверить наличие значения ключа можно методомValueExists, в который передаются имена раздела и ключа. МетодDeleteKey удаляет из файла значение указанного ключа в указанном разделе.

Проверить наличие в файле необходимого раздела можно методомSectionExists. МетодEraseSection удаляет из файла указанный раздел вместе со всеми его ключами. Имеется еще ряд методов, которые можно посмотреть во встроенной справке Delphi.

Рассмотрим на примере, как запоминать и удалять настройки программы. Создадим простое тестовое приложение. Поместим на форму три компонента Button и компонент FontDialog.

Первой кнопку присвоим имя (Name) BInst и зададим Install в ее свойстве Caption. Эта кнопка будет имитировать установку программы. Точнее, не саму установку, поскольку копировать файлы с установочной дискеты мы не будем, а только создание Ini-файлав каталоге Windows.

Вторую кнопку назовем BUnInst и зададим UnInstall в ее свойстве Caption. Эта кнопка будет имитировать удаление программы. Здесь мы не будем удалять программу с диска, а только удалим из каталога Windows наш ini-файл.

Третью кнопку назовем BFont и зададим Font в ее свойстве Caption. С помощью этой кнопки будем менять имя шрифта, используемого в форме. Имя этого шрифта надо будет запоминать в Ini-файле, чтобы в дальнейшем при запуске приложения можно было читать эту настройку и задавать ее форме.

Текст программы:

unit LabRab_10;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, IniFiles;

type

TForm1 = class(TForm)

BInst: TButton;

BUnInst: TButton;

BFont: TButton;

FontDialog1: TFontDialog;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure BInstClick(Sender: TObject);

procedure BUnInstClick(Sender: TObject);

procedure BFontClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Ini: TIniFile;

sFile: string;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var

APchar: array[0..254] of Char;

begin

//Формирование имени каталога Windows

GetWindowsDirectory(APchar, 255);

//Формирование имени ini-файла в каталоге Windows

sFile:= string(APchar) + '\My.ini';

if FileExists(sFile) then

begin

Ini:= TIniFile.Create(sFile);

// Чтение в имя шрифта формы значения ключа Шрифт

Font.Name:= Ini.ReadString('Параметры', 'Шрифт',

'MS Sans Serif');

end;

end;

procedure TForm1.BInstClick(Sender: TObject);

var

f: File;

begin

//Проверка существования ini-файла

if (not FileExists(sFile)) then

begin

// Создание ini-файла

AssignFile(f, sFile);

Rewrite(f);

CloseFile(f);

Ini:= TIniFile.Create(sFile);

end;

//Создание раздела Files, ключа main и запись в него имени

//выполняемого файла вместе с путем

Ini.WriteString('Files','main', ParamStr(0));

//Создание раздела Параметры, ключа Шрифт и

//запись в него имени шрифта формы

Ini.WriteString('Параметры', 'Шрифт', Font.Name);

end;

procedure TForm1.BUnInstClick(Sender: TObject);

var

F: File;

begin

//Удаление с диска ini-файла, если он существует

if FileExists(sFile) then

begin

AssignFile(F, sFile);

Erase(F);

end;

end;

procedure TForm1.BFontClick(Sender: TObject);

begin

//Выбор шрифта

if (FontDialog1.Execute) then

begin

// Присваивание выбранного шрифта форме

Font.Assign(FontDialog1.Font);

if (Ini<>nil) and Ini.ValueExists('Параметры','Шрифт')

then

// Запись шрифта в ключ "Шрифт" раздела "Параметры"

Ini.WriteString('Параметры','Шрифт', Font.Name);

end;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

if (Ini = nil) then Exit;

//Очистка буфера и запись файла на диск

Ini.UpdateFile;

//Освобождение памяти

Ini.Free;

end;

end.

В начале текста следует подключение к приложению модуляIniFiles и объявление переменнойIni типаTIniFile, а также переменнойsFile, в которой будет формироваться имя файла и путь к нему.

Ini: TIniFile;

sFile: string;

При создании формы приложения в процедуре TForm1.FormCreate формируется имя файла ( My.Ini ) вместе с путем к нему - каталогом Windows. Путь Windows определяется функциейGetWindowsDirectory.

Далее функциейFileExists проверяется, существует ли этот файл, т.е. проведена ли уже установка программы. Если существует, то создается объектIni, связанный с этим файлом, и значение MS Sans Serif ключа Шрифт раздела Параметры читается в имя шрифта формы. Тем самым читается настройка, произведенная при предыдущем выполнении приложения.

Теперь рассмотрим процедуруTForm1.BInstClick, имитирующую установку программы. В этой процедуре сначала функциейFileExists проверяется, существует ли в каталоге Windows файлMy.Ini. Если не существует, то последовательным применением функцийAssignFile, RewriteиCloseFile этот файл (пока пустой) создается. Затем создается связанный с этим файлом объектIni. Последующие операторы записывают в этот файл два раздела Files и Параметры с соответствующими ключами.

В ключmain записывается имя приложения с путем к нему. Для этого используется функцияParamStr(0).

В результате в созданный файл записывается, например, такой текст:

[Files]

main = D:\DEMO Delphi\DEMO1_INI.EXE

[Параметры]

Шрифт = МS Sans Serif

ПроцедураTForml.BUnInstClick имитирует удаление приложения и его файла настройки. В данном случае просто удаляется Ini-файл, но в настоящем приложении надо было бы прочитать имя файла (или файлов) приложения из раздела Files и удалить их с диска.

ПроцедураTForm1.FormDestroy, срабатывающая при закрывании формы приложения, сначала методомUpDateFile переписывает содержимое объектаIniв файл на диске, а затем методомFree удаляет из памяти этот временный объект.

ПроцедураTForml.BFontClick вызывает стандартный диалог выбора шрифта и если пользователь выбрал шрифт, то он присваивается форме и его имя заносится в ini-файл.

Сохраните свое приложение и запустите его на выполнение. Нажмите кнопку Install. После этого убедитесь в наличии файлаMy.Ini в каталоге Windows. Можете воспользоваться для этого программой Windows «Проводник» или любой другой. В частности, можно открыть этот файл просто из среды Delphi. При нажатии кнопки UnInstall файл должен удаляться с диска. Проверьте запись в файл настройки шрифта и чтение ее при последующих запусках. Для этого опять нажмите кнопку Install, а затем нажмите кнопку Font и выберите шрифт с каким-нибудь другим именем. Затем закройте свое приложение и запустите его повторно. Вы увидите, что на форме применен тот шрифт, который вы зарегистрировали в файле настройки. Таким образом, приложение проимитировало установку программы, удаление программы и запоминание ее текущих настроек.

После запуска программы и нажатия затем кнопки Install, используя проводник, в директории c:\windows можно увидеть файл MyIni.ini. Содержание файла:

[Files]

main = D:\DEMO DELPHI EXAMPLES\

DEMO1 INIFILES\PROJECTDEMO1INIFILES.EXE

[Параметры]

Шрифт = Times New Roman

После запуска программы и нажатия кнопки UnInstall в упомянутой директории файл MyIni.ini отсутствует.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: