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.