OnBeforeEdit

From SunFlurry wiki
Jump to: navigation, search
  OnBeforeEdit (События таблиц)
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Расположение:Любой глобальный модуль, текущий локальный модуль
Визуальность:Да

Функция вызывается для свободных или встроенных электронных таблиц (TABLE) до начала редактирования ячейки или объекта таблицы. Для встроенных таблиц будет вызван одноименный обработчик события, если задан, иначе данная функция. Функция вызывается для таблиц в режиме ограниченного редактирования (интерактивном режиме) и только для ячеек (или объектов), для которых не установлена галка "защита редактирования", таким образом отсекаются не подлежающие редактированию ячейки (объекты). Функция не будет вызвана для таблиц, которые находятся в режиме обычного редактирования (изменения свойств ячеек, текста, цветов и пр.), и для таблиц находящихся в режиме просмотра (особый режим с запретом сохранения таблиц на диск). Редактирование обычно инициируется пользователем, используя двойной клик мыши по ячейке или объекту или при нажатии клавиши Enter.

Редактирование может происходить двумя способами. Первый способ, это встроенный SFT редактор, который используется для создания и изменения таблиц в режиме редактирования. Этот способ позволяет редактировать ячейку только как текст. Второй способ имеет все возможности обычного поля редактирования, такие как маска, связанные элементы, выбор объектов и прочее.

Для дополнительной информации см. статьи Электронная таблица SFT и Редактор электронных таблиц

Синтаксис

OnBeforeEdit(<Вызывающая таблица (TABLE)>,<Режим редактирования (INT,OUT)>,<Тип объекта (INT)>,<Индекс объекта (INT)>,<Строка (INT)>,<Столбец (INT)>,<Связанные элементы (STRING,OUT)>,<Значение для редактирования (OUT)>,<Маска для редактирования (STRING,OUT)>)

Аргументы

  • <Вызывающая таблица (TABLE)> - Таблица, для которой произведена попытка редактирования ячейки.
  • <Режим редактирования (INT,OUT)> - (возможен аргумент-переменная (ByRef)) 0 -- использовать встроенный (текстовый) редактор SFT, 1 -- использовать редактор с возможностями поля редактирования, 2 -- запретить редактирование.
  • <Тип объекта (INT)> - -1, если редактируется ячейка, иначе цифровой тип объекта, для которого инициирована попытка редактирования. Текущие типы объектов:
    • -1 -- ячейка таблицы
    • 0 -- линия (редактирование для данного объекта не осуществляется)
    • 1 -- прямоугольник
    • 2 -- картинка
    • 3 -- OLE-объект
    • 4 -- диаграмма
  • <Индекс объекта (INT)> - Индекс объекта таблицы, для которого инициирован режим редактирования, если редактируется ячейка, данный параметр принимает значение -1.
  • <Строка (INT)> - Строка таблицы ячейки редактирования, если редактируется объект, данный параметр принимает значение -1.
  • <Столбец (INT)> - Столбец таблицы ячейки редактирования, если редактируется объект, данный параметр принимает значение -1.
  • <Связанные элементы (STRING,OUT)> - (возможен аргумент-переменная (ByRef)) Связанные элементы, ассоциированные с полем редактирования, если редактирование будет производиться в режиме 1. Параметр представляет собой строку с перечислением через запятую индексов связанных элементов. К примеру ""+_AB_CHOOSE+","+_AB_CLEAR+","+_AB_HELP (см. список значений констант связанных элементов).
  • <Значение для редактирования (OUT)> - (возможен аргумент-переменная (ByRef)) Значение любого типа, которое попадет в поле редактирование для режима 1. Значение может быть никак не связано с текущим текстом ячейки или объекта таблицы.
  • <Маска для редактирования (STRING,OUT)> - (возможен аргумент-переменная (ByRef)) Маска поля редактирования, если редактирование происходит в режиме 1. Маска может быть стандартной маской (см. Tab.Column.Mask), однако для чисел подобная стандартная маска неудобна, поэтому можно задать специальную числовую маску в виде "!<Цифр в числе>.<Цифр в мантиссе>" (к примеру "!15.3").

Примеры

Function OnBeforeEdit(SourceTable,EditMode,ObjectType,ObjectIndex,Line,Column,AttButtons,EditValue,EditMask)
  //Запретить редактировать по умолчанию
  EditMode:=2;
  If ObjectType<>-1 Then
    //Редактирование не производится для объектов
    Exit;
  EndIf;
  //Получить значение ячейки таблицы (в отличие от ее видимого текста, значение может содержать произвольный объект и не видно пользователю)
  aList:=SourceTable.Area(Column,Line,Column,Line).Value;
  if typeStr(aList)<>"LIST" Then
    //Если значение не является списком, не разрешать редактирование
    Exit;
  EndIf;
  if isEmpty(aList.GetByName("Индекс")) Then
    //Если в списке отсутствует элемент с именем "Индекс", не разрешать редактирование
    Exit;
  EndIf;
  //Получить текст ячейки редактирования и превратить его в число
  EditValue:=Number(Replace(Replace(SourceTable.Area(Column,Line,Column,Line).Text,"'","")," ",""));
  //Производится редактирование в режиме расширенного редактора
  EditMode:=1;
  //При рекдатировани использовать редактор числа с двумя знаками после десятичной точки
  EditMask:="!10.2";
  //Добавить связанный элемент (кнопку) с иконкой калькулятора, которая автоматически будет вызывать калькулятор для помощи в редактировании числового поля
  AttButtons:=""+_AB_CALC;
EndFunction