Шаг 6.7 - Настройка процедур окружения формы регистрации нового раздела.
Установите курсор на форму fmItemLibOKP, в инспекторе свойств перейдите на закладку Events, создайте процедуру FormShow для события OnShow. Введите в тело процедуры следующие строки:
procedure TfmItemLibOKP.FormShow(Sender: TObject);
begin
Self.vlom.GetGlobalId;
// загрузить идентификаторы компонента vlom - TVLOwnerManager из системного буфера
end;
Перейдите на форму fmItemLibOKP, дважды щелкните по кнопке bbtOk, будет создана процедура bbtOkClick. Введите в теле процедуры следующие строчки:
procedure TfmItemLibOKP.bbtOkClick(Sender: TObject);
begin
Self.vlom.InsertObject(False);
// создать объект указанного типа в указанном состоянии и присоединить его по указанной связи
// к родительскому объекту компонента vlom - TVLOwnerManager,
// после чего сохранить атрибуты созданного объекта введенные в поля формы
end;
Таким образом при загрузке формы на экран компонент vlom - TVLOwnerManager считывает из системного буфера идентификаторы заранее заданных объектов вместе с дополнительной информацией и помещает все в свои свойства. После того, как пользователь введет в поля формы какие-либо данные кнопка bbtOk станет доступной. После нажатия на нее мышкой компонент vlom создаст новый объект указанного в свойствах типа в указанном состоянии и присоединить его к родительскому объекту по указанной связи. При этом также будут сохранены атрибуты введенные в поля формы. Идентификатор вновь созданного объекта помещается в свойство InBDID компонента vlom. Идентификатор вновь созданной связи помещается в свойство InLBDID.
Теперь остается только позаботится о том, чтобы перед вызовом формы fmItemLibOKP в системный буфер была загружена необходимая информация. Для этого перейдите в модуль PCLibOKP (см. Урок 5), встаньте на форму fmLibOKP, дважды щелкните на компоненте am - TActionManager и в редакторе действий дважды щелните на действии InsLib - Создать (см. рис. 6.5).
Рис. 6.5.
Будет создана процедура для указанного действия InsLibExecute. Введите в раздел implementation и в тело созданной процедуры следующие строки:
implementation
uses PCItemLibOKP;
...
procedure TfmLibOKP.InsLibExecute(Sender: TObject);
begin
inherited;
Self.vltv.GetGlobalId;
// поместить в системный буфер идентификаторы и дополнительную информацию
// из компонента vltv - TVLTableView
fmItemLibOKP:=TfmItemLibOKP.Create(Application);
// создать форму для регистрации нового раздела ОКП
try
if fmItemLibOKP.ShowModal=mrOk then
// загрузить форму на редактирование
// если работа закончена нажатием кнопки ОК
begin
Self.vltv.RefreshLink(fmItemLibOKP.vlom.InLBDID);
// обновить таблицу подчиненных разделов
end;
finally
fmItemLibOKP.Free;
// освободить память, удалить форму
end;
end;
Скомпилируйте приложение, загрузите окно классификатора ОКП, встаньте в дереве классификатора на какую-нибудь ветку и проверьте работу контекстного меню таблицы подчиненных разделов (см. рис. 6.6). Зарегистрируйте новый раздел.
Рис. 6.6.
Далее...