Руководство разработчика

Разрешение команд и обработка их кодов

В платформе многие действия обрабатываются встроенным механизмом по кодам стандартных команд. Запретить или разрешить встроенную обработку команд можно при помощи метода КОМАНДА_РАЗР. Разрешение команд приводит к тому, что соответствующие им пункты в меню или кнопки на панели инструментов становятся доступными. Кроме того, данный метод позволяет заменить встроенную обработку команды на собственную. Для задания собственной обработки стандартной команды, нужно воспользоваться методом КОМАНДА_РАЗР, а потом переопределить действия стандартной команды в обработчике команда.

Обработкой строковых кодов команд, которые посылаются форме, занимается обработчик команда. Обработчик возвращает значение ДА, если для обработки команды требуется собственный алгоритм, при возврате значения НЕТ используется стандартная платформенная обработка команды.

Пример

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

ТИП Диалог_таблица(ДИАЛОГ)
[
  ПОДМЕНА открытие = {Открытие};
  ПОДМЕНА до_открытия = {Заполнение_внутреннего_источника};
  ТАБЛИЦА: Таблица1 = [ левый = 25,
                        верхний = 50,
                        ширина = 350,
                        высота = 215,
                        табиндекс = 1003,
                        кол_столбцов = 3,
                        кол_строк = 1,
                        кол_фикс_столбцов = 1,
                        размер_столбца = 50,
                        размер_строки = 20,
                        столбцы = ( 1: 76,
                                    3: 105 ),
                        элементы = ( 1, 1: "номер",
                                     2, 1: "ТОВАРЫ",
                                     3, 1: "цена",
                                     4, 1: "Производитель" ),
                        стр_доб = ДА,
                        команда = {Команда} ];

  ФУНКЦИЯ ЛОГИКА: Заполнение_внутреннего_источника
    РЕЗУЛЬТАТ = ДА
    ЦИКЛ ДЛЯ (строка = 2, 10)
      Таблица1.элементы[1, строка] = строка - 1
      Таблица1.элементы[2, строка] = "ТОВАР_" + СТР(строка - 1)
      Таблица1.элементы[3, строка] = СЛУЧ_ЧИСЛО(500)
      Таблица1.элементы[4, строка] = "Производитель_" + СТР(строка - 1)
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ ЛОГИКА: Команда(ПЕРЕМ ТАБЛИЦА: элемент; СТРОКА: код)
    ВЫБОР(код)
      #"+", "_ADD_":
        элемент.кол_строк ++
        элемент.ОБНОВИТЬ
        Обновить_команду
        РЕЗУЛЬТАТ = ДА
      #"_DEL_":
        ЕСЛИ элемент.кол_строк <> 0 ТО
          элемент.кол_строк --
          элемент.ОБНОВИТЬ
          Обновить_команду
        КОНЕЦ_ЕСЛИ
        РЕЗУЛЬТАТ = ДА
    ИНАЧЕ 
	  РЕЗУЛЬТАТ = НЕТ
    КОНЕЦ_ВЫБОРА
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ Обновить_команду
    КОМАНДА_РАЗР("_ADD_",ДА)
    ПЕРЕМ поз = Таблица1.КУР_СТРОКА
    ЕСЛИ поз <= 0 ТО
      КОМАНДА_РАЗР("_DEL_",НЕТ)
    ИНАЧЕ 
      КОМАНДА_РАЗР("_DEL_",ДА)
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ Открытие
    ПЕРЕМ ПАНЕЛЬ_ИНСТРУМЕНТОВ: панель
    ПЕРЕМ МИНИ_КНОПКА: кн1
    кн1.иконка.файл = "#DELETE"
    кн1.команда = "_DEL_"
    панель.кнопки = (кн1)
    УСТ_ПАН_ИНСТР(панель)
    Обновить_команду
  КОНЕЦ_ФУНКЦИИ
]

ВЫЧИСЛИТЬ
  ПЕРЕМ Диалог_таблица: д
  // д <- данные
  ЕСЛИ д.ПОКАЗАТЬ_МДИ <> "" ТО
    // д -> данные
  КОНЕЦ_ЕСЛИ
КОНЕЦ

См. также: