Редактирование и добавление записей
Вначале указатель файла смещается в самый конец, подготавливая добавление записей (судя по всему, режим добавления будет использоваться гораздо чаще, чем режим редактирования). Затем формируется заголовок окна и само окно. Операторы:
if Edit then with Data do begin {Готовим начальный текст:} ……. end;
Готовят начальное состояние полей ввода в режиме редактирования. Оператор:
InWin. SetData (Data)
Помещает подготовленный текст в нужные поля. При обращении к процедуре SetData данные должны быть предварительно подготовлены в строгом соответствии с порядком создания диалоговых полей в окне и типом их данных. Поскольку в нашем случае формат данных в полях ввода окна совпадает с форматом файловых данных, мы можем использовать одну и ту же переменную как для работы с файлом, так и для установки начальных значений диалоговых полей.
В самом общем случае пользователь должен объявить новый тип, соответствующий формату помещаемых в окно данных, и использовать выражение этого типа в качестве параметра обращения к процедуре SetData. Например, если бы в нашем окне было предусмотрено только одно поле ввода "Телефон", то установку данных можно было бы осуществить таким оператором:
InWin. SetData (DataType. Phone)
Где DataType.Phone – выражение типа String [LPhone].
Контроль за соответствием типа устанавливаемых данных порядку объявления и типу данных диалоговых полей полностью возлагается на программиста. В операторах:
if Control=cmOk then with Data do begin ….. end
Данные, полученные из диалогового окна, помещаются сначала в отсортированную коллекцию, а затем – в файл. С помощью оператора:
if OldCount <>PS. Count then
Проверяется изменение количества данных в коллекции (напомню, что в отсортированную коллекцию можно поместить только уникальную запись). Если количество записей в коллекции изменилось, значит новая запись не совпадает ни с одной из уже имеющихся и ее следует поместить в файл.
Операторы:
if Edit then DeleteItem; {Удаляем старую запись}
Предварительно удаляют старую запись с помощью обращения к процедуре DeleteItem.