cmDelOnProtect: обработка Delete на защищенном от записи поле |
Идентификатор события - cmDelOnProtect.
Оператор Abort может быть выполнен. В этом случае подцепка не удаляется.
Оператор Stop может быть выполнен.
Событие возникает, если была нажата клавиша Delete на защищенном от записи поле.
Если текущее поле принадлежит подцепленной записи, то стандартный обработчик удаляет подцепку (очищает поле ссылки на подцепленную запись). В противном случае никаких действий не выполняется. Действия по умолчанию можно изменить с помощью атрибутов delRel, noDel и delDefault (см. раздел "Атрибуты поля. ").
В данном примере клавиша Delete на поле mtFields.Name обнуляет поле mtList.cField. Операторы Abort и Stop отменяют обнуление.
//****************************************************************************** interface Test 'TestDel'; //----------------------------------------------------------------------------- table struct mtFields ( Nrec: comp, Name: string ) with index ( mtFields1 = Nrec (unique, surrogate) ); //----------------------------------------------------------------------------- table struct mtList ( Nrec: comp, cField: comp ) with index ( mtList1 = Nrec (unique, surrogate) ); //----------------------------------------------------------------------------- create view var wParam: word; as select * from mtList, mtFields where (( mtList.cField == mtFields.NRec )) ; //----------------------------------------------------------------------------- screen scLeft; show at(,, 30,); noTableNavigation; fields wParam: NoProtect; << Использовать: [.] abort` [.] stop` >> end; //----------------------------------------------------------------------------- browse brMain; show at(31,,,); table mtList; fields mtList.Nrec 'mtList.Nrec' : [15], protect; mtList.cField 'mtList.cField' : [15], protect; mtFields.Name 'mtFields.Name' : [15], protect; end; //----------------------------------------------------------------------------- procedure AddField(asName: string): comp; { ClearBuffer(#mtFields); mtFields.Name := asName; insert current mtFields; ClearBuffer(#mtList); mtList.cField := mtFields.NRec; insert current mtList; } //----------------------------------------------------------------------------- handleEvent // Interface cmInit: { ResetBounds(#mtFields); AddField('Проверка-1'); AddField('Проверка-2'); AddField('Проверка-3'); AddField('Проверка-4'); SetBounds(#mtFields); } cmDelOnProtect: { if ((wParam and 1) <> 0) abort; if ((wParam and 2) <> 0) stop; } end; //----------------------------------------------------------------------------- tableEvent table mtList cmUpdateRecord: { update current mtList; } end; End.