В настроечной таблице существует поле – Функции предварительной обработки. Это поле обрабатывается аналогично полю Функция приема, только не в момент приема в таблицу, а в момент корректировки содержимого соответствующего столбца основной таблицы.
Функции предварительной обработки вызываются:
если находились не в режиме корретировки и попытались войти в режим корректировки (причем отслеживается также и вставка из буфера по SHIFT+INS)
находились в режиме корректировки и попытались изменить содержимое поля (в том числе по клавишам Del, Backspace, Shift+Ins).
Если мы "проходим" таблицу по Enter (то есть в режиме корректировки), то программа допускает попадание на поле, которому необходима предварительная обработка, без вызова функций предварительной обработки, но, как только пользователь попытается изменить поле, тут же запускается механизм предварительной обработки.
Механизм предварительной обработки отключается режимом CTRL+A+A.
В качестве функций предварительной обработки могут вызываться обычные функции печати (приема), которые конечно имеют смысл в данном контексте.
В настоящий момент существует всего две специализированных функции предварительной обработки:
PARCER - для возможности хранения в одном поле таблицы целой таблицы (вот такая вот рекурсия);
CLASSIF - для возможности вызова для столбцов таблицы справочников.
Параметры для этих функций задаются так:
КЛЮЧ1:ЗНАЧЕНИЕ_КЛЮЧА1 [,КЛЮЧ2:ЗНАЧЕНИЕ_КЛЮЧА2...]
Допустимые ключи:
NF - имя файла (справочника, либо таблицы для визуализации парсера). Если этот параметр отсутствует, то PARCER не дает никакого результата, а CLASSIF отрабатывает по имени файла, которое формируется по особому правилу: если имя поля начинается на '_', то формируется имя файла по имени поля (без первого символа) в каталоге, где располагается "родительская" таблица (расширение у файла такое же как и у таблицы), в противном случае формируется имя файла по имени поля в каталоге T_CLASS с расширением *.clf.
Не забывайте при задании пути к файлам, что текущим каталогом является ZPL. |
PX – координата X для левого верхнего угла таблицы;
PY – координата Y для левого верхнего угла таблицы.
Если координаты не заданы, то значениями по умолчанию будут координаты редактируемой ячейки таблицы, модифицированные таким образом, чтобы по возможности видеть оригинал корректируемого поля. Если, в конечном счете, и эти координаты будут = 0, то значение по умолчанию (50,5). |
DX – размер таблицы по горизонтали (по умолчанию 29);
DY – размер таблицы по вертикали (по умолчанию -1, то есть определяется количеством строк таблицы, но не больше 8, если надо изменить число 8 на другое число N, то DY = -N).
KF — имя ключевого поля для справочника (толко для функции CLASSIF) – имя поля, откуда будет браться значение при нажатии пользователем Enter (по умолчанию – первый столбец).
Не забывайте при задании пути к файлам, что текущим каталогом является ZPL. |
WIND — как располагать таблицу: 'V' – вертикальная, 'G' – горизонтальная (по умолчанию 'G').
HEAD — для WIND=’G’ – количество строк на заголовок столбцов, для WIND='V' – ширина столбца с названиями столбцов (по умолчанию 0).
SEPF — разделители столбцов (только для PARCER) (по умолчанию ',')
SEPR — разделители строк (только для PARCER) (по умолчанию ';')
У функции CLASSIF можно указать дополнительный ключ S:имя функции в этом случае при корректировке справа в поле ввода появится кнопка вызова справочника, при нажатии на которую вызывается скриптовая функция указанная после S:
параметры скриптовой функции (&buffer,bufsize,handle,&C_Params), где:
// buffer - буфер для измененного текста // bufsize - его размер // handle - дескриптор edit окна где происходит ввод // C_Params - структура CLASSIF_PARAMS, в составе которой содержатся все ключи перечисленные в CLASSIF: struct CLASSIF_PARAMS { char FuncName[32]; // имя функции char NF[260]; // параметр функции, имя файла таблицы справочника char KF[11]; // параметр функции, ключевое поле int PX,PY,DX,DY; // параметры функции, координаты и размеры окна long pTabl; // указатель на текущую таблицу int N_Fld,N_Rcr; // номер столбца и строки редактируемой ячейки int WinX,WinY; // абс. координаты левого верхнего угла где желательно вывести справочник };
В качестве примера есть функция SRef в файле funcrw.s, которая вызывает простой справочник заданного ключом NF:
Т. е. к примеру если мы хотим подключить к полю таблицы "код улицы" справочник T_GUIDE\street.tab то в функцию предварительной обработки для этого поля следует написать: CLASSIF(S:SRef, NF:T_GUIDE\street.tab).
Для задания значения ключей разделителей ",;" используются буквосочетания: ЗПТ - , ТЗПТ - ; .
Замечания по заполнению таблицы функцией PARCER:
|