Для того чтобы некоторое действие можно было привязать к экранной кнопке или кнопке клавиатуры в системе предусмотрен механизм выполнения действия по идентификатору команды. Все идентификаторы описаны в unit'е uCommands
.
У каждой кнопки в POS есть идентификатор команды. Получение визуальных параметров кнопки, а также обработка нажатия происходит посредством обращения к текущей активной форме (через экземпляр TssCommander
в формах-потомках класса TCommanderForm
),
На данный момент в POS сосуществуют два способа обработки команды:
Основной - у формы вызывается метод GetCommand
, который может вернуть экземпляр класса TCommand
. Он в себе содержит методы визуализации кнопки (свойства Enabled
, Caption
, FontColor
и так далее) и метод выполнения действия (Call
).
Объект ищется в списке FCommandList
. Если ничего не найдено, то происходит вызов InitNewCommand
, где может «на лету» быть создан объект TCommand
(он также попадает в список FCommandList
, при повторном обращении с тем же идентификатором команды дубликат объекта не создается). Обычно удобно заранее сформировать список команд (метод FillCommands
), но бывает необходимо создавать объект «на лету» - например, когда для экранной кнопки назначена команда присвоения привилегии и в её параметрах указан идентификатор привилегии.
Рудиментарный - у формы для получения визуальных свойств кнопки вызывается RefreshCommandState
и RefreshCommandEnabled
. Для выполнения действия вызывается ExecuteCommand
.
Наследники формы TCommanderForm
в соответствующих методах могут обращаться в свою очередь к соответствующим методам других объектов для обработки команды
наследники TCommandHolder
(и любые другие, если надо)
встроенные формы: например, превью счета (
) или форма выбора элементов прейскуранта ( ).