Разрешение команд и обработка их кодов
Так как панель инструментов является частью рамки окна табличной формы, а не самостоятельным элементом управления ячейки, у нее нет собственных обработчиков событий. Для выполнения команд, посылаемых табличной форме, используется обработка строковых кодов команд соответствующих кнопок в панели инструментов. Обработкой строковых кодов команд занимается обработчик команда.
Обработчик возвращает значение ДА, если для обработки команды требуется собственный алгоритм, при возврате значения НЕТ используется стандартная платформенная обработка команды. Для того чтобы использовать стандартную платформенную обработку команды, применяются соответствующие строковые коды стандартных команд.
Доступность кнопок со стандартными командами может определяться разрешением команды, установленным методом КОМАНДА_РАЗР.
Кроме того, этот метод позволяет запретить встроенную обработку команд и задать собственную. Для задания собственной обработки стандартной команды, нужно воспользоваться методом КОМАНДА_РАЗР, а потом переопределить действия стандартной команды в в обработчике команда.
Пример
Пример иллюстрирует реализацию собственной процедуры добавления, редактирования и удаления, а также доступность этих команд в зависимости от текущей позиции курсора. Команда добавления реализует добавление новой строки, редактирование - заполнение строки, а удаление - удаление строки.
ТИП РедФорма(ТАБ_ФОРМА) [ ПОДМЕНА файл = "Ред_форма.ibf"; ПОДМЕНА открытие = {Открытие}; ПОДМЕНА команда = {Команда}; ПОДМЕНА изменение = {Изменение}; ФУНКЦИЯ Открытие ПЕРЕМ ПАНЕЛЬ_ИНСТРУМЕНТОВ: панель ПЕРЕМ МИНИ_КНОПКА: кн1, кн2, кн3 кн1.иконка.файл = "#ADD" кн1.команда = "_ADD_" кн2.иконка.файл = "#EDIT" кн2.команда ="_EDIT_" кн3.иконка.файл = "#DEL" кн3.команда ="_DEL_" панель.кнопки = (кн1,кн2,кн3) УСТ_ПАН_ИНСТР(панель) КОНЕЦ_ФУНКЦИИ ФУНКЦИЯ ЛОГИКА: Команда(ПЕРЕМ ТАБ_ФОРМА: форма; СТРОКА: код) ПЕРЕМ стр = КОЛ_СТРОК("Раздел2") #"_ADD_": РЕЗУЛЬТАТ = ДА ПЕРЕМ ТФ_РЕЖИМ_ДОБАВЛЕНИЯ:режим_добавления режим_добавления = [копировать_данные = НЕТ, копировать_атрибуты = ДА, деление_границ = ТФ_ДГ_КОПИРОВАТЬ] УСТ_РЕЖ_ДОБАВЛЕНИЯ(режим_добавления) ДОБАВИТЬ_СТРОКУ("Раздел2", стр) #"_EDIT_": РЕЗУЛЬТАТ = ДА ПЕРЕМ ТФ_ЯЧЕЙКА: яч_наим, яч_ед, яч_цена ПЕРЕМ ЦЕЛОЕ: цена = СЛУЧ_ЧИСЛО(2000) яч_наим = [имя_раздела = "Раздел2", имя_столбца = "наименование", строка = стр] яч_ед = [имя_раздела = "Раздел2", имя_столбца = "ед_изм",строка = стр] яч_цена = [имя_раздела = "Раздел2", имя_столбца = "цена",строка = стр] УСТ_ТИП_ЯЧЕЙКИ(яч_наим, ТФ_ТЯ_СТРОКА) УСТ_ТИП_ЯЧЕЙКИ(яч_ед, ТФ_ТЯ_СТРОКА) УСТ_ТИП_ЯЧЕЙКИ(яч_цена, ТФ_ТЯ_СТРОКА) УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч_наим, "Товар "+ СТР(стр - 1)) УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч_цена, СУММАП(цена)) #"_DEL_": РЕЗУЛЬТАТ = ДА ЕСЛИ стр <> 1 ТО УДАЛИТЬ_СТРОКУ("Раздел2", стр) КОНЕЦ_ЕСЛИ ИНАЧЕ РЕЗУЛЬТАТ = НЕТ КОНЕЦ_ВЫБОРА КОНЕЦ_ФУНКЦИИ ФУНКЦИЯ Изменение(ПЕРЕМ ТАБ_ФОРМА: форма; ТФ_ЯЧЕЙКА: ячейка) ЕСЛИ ячейка.имя_раздела = "Раздел2" ТО КОМАНДА_РАЗР("_ADD_", ДА) КОМАНДА_РАЗР("_EDIT_", ДА) КОМАНДА_РАЗР("_DEL_", ДА) ИНАЧЕ КОМАНДА_РАЗР("_ADD_", НЕТ) КОМАНДА_РАЗР("_EDIT_", НЕТ) КОМАНДА_РАЗР("_DEL_", НЕТ) КОНЕЦ_ЕСЛИ КОНЕЦ_ФУНКЦИИ ] ВЫЧИСЛИТЬ ПЕРЕМ РедФорма: тф тф.ПОКАЗАТЬ КОНЕЦ