Buch lesen: «Иcпользование API на Delphi 7»
ЛЕКЦИЯ №1
1. РАБОТА С INI – ФАЙЛАМИ
Ini-файл – это текстовый файл, в котором информация сгруппирована по секциям, ключам. Данные файлы широко применяются во многих приложениях и в операционной системе Windows для хранения различных программных данных и настроек пользователя. В таком файле можно хранить, например, положение окон программы, дату, время и продолжительность работы программы, пути к разным данным и данным, выбранные в программе настройки пользователя Ниже приведена структура и пример Ini-файла:
Для работы с Ini-файлами применяется дополнительный модуль Delhi «inifiles». Ссылку на данный модуль необходимо прописать в разделе «uses» работающей с Ini-файлами форме программы. Вся работа с Ini-файлами осуществляется через тип «TiniFile» модуля «inifiles». Основные методы данного типа следующие:
Create | Открытие Ini-файла для чтения или записи |
Free | Закрытие открытого Ini-файла |
UpdateFile | Обновляет данные из/в файла на диске |
SectionExists | Проверка существования в файле данной секции |
ValueExists | Проверка существования в файле ключа в данной секции |
ReadSections | Получение перечня всех секций файла |
EraseSection | Удаление данной секции со всеми ее ключами |
DeleteKey | Удаление ключа в данной секции |
ReadSection | Получение перечня ключей данной секции |
ReadSectionValues | Получение значений всех ключей (с именами) данной секции |
ReadString | Чтение строкового значения из ключа данной секции |
ReadBool | Чтение логического значения из ключа данной секции |
ReadDate | Чтение даты из ключа данной секции |
ReadDateTime | Чтение даты и время из ключа данной секции |
ReadFloat | Чтение вещественного значения из ключа данной секции |
ReadInteger | Чтение целого значения из ключа данной секции |
ReadTime | Чтение времени из ключа данной секции |
WriteString | Запись (обновление) строкового значения в ключ данной секции |
WriteBool | Запись логического значения в ключ данной секции |
WriteDate | Запись даты в ключ данной секции |
WriteDateTime | Запись даты и времени в ключ данной секции |
WriteFloat | Запись вещественного значения в ключ данной секции |
WriteInteger | Запись целого значения в ключ данной секции |
WriteTime | Запись времени в ключ данной секции |
Рассмотрим на подробном примере процедуру записи информации в Ini-файл:
procedure TForm1.Button3Click(Sender: TObject);
var t_Ini: TIniFile;
k: integer; s, path_pr, nfile: string; td: tdatetime;
begin
k:=736; s:='Okey'; td:=now;
path_pr:=ExtractFilePath(application.exename) +'tsn.ini';
t_Ini := TIniFile.Create(nfile);
try
with t_Ini do begin
WriteInteger('TSN', 'str1', k);
WriteFloat('TSN', 'str2', 736.123);
WriteString('TSN', 'str3', s);
WriteDate('TSN', 'str4', strtodate('01.02.2012'));
WriteTime('TSN', 'str5', td);
Writebool('TSN', 'str6', true);
end;
except
showmessage('Нет доступа к Ini-файлу !');
end;
t_Ini.Updatefile; t_Ini.Free;
end;
Рассмотрим на примере процедуру считывания ранее сохраненной информации из Ini-файла:
procedure TForm1.Button4Click(Sender: TObject);
var t_Ini: TIniFile;
k: integer; s, path_pr, nfile: string; td: tdatetime;
begin
path_pr:=ExtractFilePath(application.exename) +'tsn.ini';
t_Ini := TIniFile.Create(nfile);
try
with t_Ini do begin
k:=ReadInteger('TSN', 'str1', -1); showmessage(inttostr(k));
s:=ReadString('TSN', 'str3', '-1'); showmessage(s);
td:=ReadDate('TSN', 'str4', strtodate('1.1.2000'));
showmessage(datetostr(td));
showmessage(floattostr(ReadFloat('TSN', 'str2', -1.123)));
showmessage(timetostr(ReadTime('TSN2', 'str5', now)));
showmessage(inttostr(byte(ReadBool('TSN2', 'str6', false))));
end;
except
showmessage('Нет доступа к Ini-файлу !');
end;
t_Ini.Free;
end;
ЛЕКЦИЯ №2
1. РАБОТА С РЕЕСТРОМ WINDOWS
Реестр Windows – это база данных, в которой операционная система Windows и внешние программы сохраняют нужные им данные. Логическая структура реестра напоминает строение Ini-файла, отличие состоит в том, что Ini-файл состоит из разделов (секций) и ключей раздела со значениями, а реестр состоит из разделов, вложенных подразделов (неограниченное число) и ключей (параметров) разделов/подразделов со значениями.
Реестр Windows имеет древовидную структуру, подобную файловой системе, где разделы и подразделы соответствуют каталогам и подкаталогам, а ключи со значениями – именам файлов:
Рис. 1
Любая программа может сохранять свои данные или в реестре Windows или в Ini-файлах. Достоинства и недостатки использования реестра и Ini-файлов следующие:
Параметр | Использование реестра Windows | Использование Ini-файлов |
Перенос данных с компьютера на компьютер | Трудность переноса данных с использованием экспорта/импорта ветвей реестра через программу редактора реестра («regedit») | Легкость переноса данных путем простого копирования Ini-файла с одного компьютера на другой |
Модификация данных | Через функции прикладной программы или программу редактора реестра | Через функции прикладной программы или корректировки в обычном текстовом редакторе |
Привязка к конкретному пользователю Windows | Автоматически на уровне операционной системы через корневой раздел «HKEY_CURRENT_USER» | Трудно через функции прикладной программы |
Привязка к конкретному компьютеру | Автоматически на уровне операционной системы через корневой раздел «HKEY_LOCAL_MACHINE» | Трудно через функции прикладной программы |
Таблица 1
Реестр состоит из шести корневых разделов, два из которых представляют наибольший интерес: раздел «HKEY_LOCAL_MACHINE» предназначен для хранения данных, доступных всем пользователям Windows, а раздел «HKEY_CURRENT_USER» хранит данные, доступные только для текущего пользователя Windows. Другие корневые разделы обычно используются только операционной системой и некоторыми системными программами.
Язык программирования Delphi 5 позволяет производить с реестром Windows любые манипуляции через подключение модуля «Registry» в разделе «interface -> uses». Рассмотрим на примере основные базовые операции при записи и считывании данных с реестра:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
{ Процедура записи данных в реестр }
var Reg: tRegistry;
begin
Reg:=tRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
try
if Reg.OpenKey('\Software\TSN736\', true) then begin
if not Reg.KeyExists('setup') then Reg.CreateKey('setup');
if Reg.OpenKey('\Software\TSN736\setup', false) then begin
Reg.WriteInteger('Left', form1.left); Reg.WriteInteger('Top', form1.top);
Reg.CloseKey;
end;
end;
finally
Reg.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
{ Процедура чтения данных с реестра }
var Reg: tRegistry;
begin
Reg:=tRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
try
if Reg.OpenKey('\Software\TSN736\setup', false) then begin
try form1.left:=Reg.ReadInteger('Left'); except; end;
try form1.top:=Reg.ReadInteger('Top'); except; end;
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;