Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

2.14. Отслеживание изменений на диске (tDirChange)

Для отслеживания такого события, как изменение содержимого директории, или модификация файлов в директории, в KOL имеется специальный объект TDirChange (он находится в модуле KOLadd.pas). Его цель - вызывать назначенное событие каждый раз, когда происходит одно из изменений, заданных фильтром слежения.

Конструктор:

NewDirChangeNotifier( s, filter, watchsubtree, onchange ) - создает и возвращает объект типа PDirChange (однако, если параметры указаны неверно, возвращается nil). В качестве фильтра могут быть указаны имена файлов, директорий, атрибуты, размер файлов, а так же время создания, модификации и последнего доступа к файлам.

Никаких существенных свойств или методов данный объект не содержит (пожалуй, можно отметить свойство-строку Path, в которой хранится путь к мониторируемой директории). Событие, которое вызывается при обнаружении изменений в области слежения, задается в конструкторе объекта. Когда оно срабатывает, обработчик получает путь к директории, в которой обнаружено изменение (полезно для случая, когда объект следит сразу за директорией вместе со всеми поддиректориями). Для того, чтобы определить, какие именно изменения произошли, программа должна хранить информацию о прежнем состоянии директории, при наступлении изменений пересканировать директорию, и выполнить сравнение - своим кодом.

2.15. Ini-файлы (TIniFile)

Программа может хранить свои настройки в реестре или в ini-файлах. Или она может хранить свои настройки и в реестре, и в ini-файлах. Хранение таких настроечных данных в реестре обеспечивает возможность каждому пользователю компьютера иметь свои собственные настройки, а так же сохранять настройки приложению, которое запускается в условиях, когда нет разрешения напрямую изменять содержимое (дискового) носителя. Например, это может быть компакт-диск, или носитель с блокировкой возможности изменения информации. Хранение настроек в ini-файле имеет свои преимущества. Например, позволяет всем пользователям компьютера иметь одни и те же настройки, которые не теряются при переустановке операционной системы. Кроме того, использование приложениями ini-файлов слегка "облегчает" размеры реестра операционной системы.

Вывод из сказанного: работать с ini-файлами бывает необходимо при разработке приложений. И такой объект есть в KOL. Его конструктор:

OpenIniFile( s ) - создает объект типа TIniFile, возвращая указатель на него типа PIniFile. Вновь созданный объект либо связан с существующим ini-файлом (с именем s), либо, если такого файла в момент вызова не существует, он создается автоматически.

В этом объекте KOL для работы с ini-файлами имеется особенность, позволяющая в некоторых случаях использовать одну и ту же процедуру для того, чтобы обеспечить и загрузку, и сохранение настроек. И чтение, и запись значений ключей выполняется одними и теми же методами объекта. Что именно делать, читать или писать, определяет режим работы с файлом настроек (свойство Mode).

Свойства и методы объекта TIniFile:

Mode - режим работы: ifmRead - чтение, ifmWrite - запись;

Filename - имя файла настроек (только для чтения);

Section - секция ini-файла (в файле настроек секция начинается со строки, содержащей в квадратных скобках имя секции);

ValueInteger( key, i ) - в режиме чтения возвращает значение ключа, при этом величина i используется как значение по умолчанию, которое возвращается при отсутствии ключа key в текущей секции; в режиме записи тот же метод выполняет запись нового значения i для ключа key;

ValueString( key, s ) - аналогично предыдущему методу, но для строкового значения ключа;

ValueBoolean( key, s ) - то же самое для булевского значения;

ValueData( key, buf, i ) - аналогично предыдущим методам, но работа идет с блоком данных длины i байт;

ValueDouble( key, d ) – то же для вещественного числа типа Double;

ClearAll - полная очистка файла настроек (удаляются все секции вместе со всеми ключами);

ClearKey( s ) - удаляет ключ s в текущей секции;

GetSectionNames( SL ) - читает в объект списка строк (PStrList) имена всех секций из файла настроек;

GetSectionData( SL ) - читает в объект списка строк все содержимое текущей секции.

Приведу небольшой пример того, как возможно одним и тем же кодом обеспечить и запись, и сохранение настроек. Пусть, например, мы хотим сохранять по завершении работы координаты окна приложения в файле настроек, а в начале работы восстанавливать их оттуда. Создадим метод, который будет выполнять обе эти операции:

procedure MyObj.ReadWriteIni( write: boolean );

var ini: PIniFile;

begin

ini := OpenIniFile( GetStartDir + 'my.ini' );

if write then ini.Mode := ifmWrite;

ini.Section = 'position';

form.Left := ini.ValueInteger( 'Left', form.Left );

form.Top := ini.ValueInteger( 'Top', form.Top );

ini.Free;

end;

Теперь, при запуске приложения организуем вызов этого метода с параметром false, а при закрытии - с параметром true. Предоставляю вам самим разобраться, почему этот код будет делать все, что от него требуется, хотя работают одни и те же операторы в обоих случаях.