3.3.8. Паскаль события

3.3.8.1. Справочник

Список событий
AfterClose CloseFormOK OnBeforeNavigate OnEditEvent OnLinkCreate
AfterEdit DeleteItem OnCanStartDrag OnEventAdd OnLinkDelete
AfterGetSqlText GetSqlText OnClientFilterChanged OnEventSelectionChanged OnLoadMeta
AfterOpen HandleEvents OnCloseFormQuery OnFilterFinalize OnResetFilter
BeforeClose InsertItem OnColumnHeaderClick OnFilterInit OnSelectionChanged
BeforeEdit OnActivateEditor OnControllerCreated OnFocusedCellChanged OnShow
BeforeEdit_before OnAddSelectedRecToFilter OnDateNavigatorPeriodChanged OnFocusedFieldChanged OnShowCellComment
BeforeGetSqlText OnAfterBulkUpdate OnDateNavigatorSelectionChanged OnFocusedItemChanged OnShowEditor
BeforeOpen OnAfterNodeOpen OnDeleteEvent OnFormActivatedAfterFindWindow OnUnloadMeta
CheckWorkability OnApplyFilter OnDragDrop OnFrameActivated RefreshItem
CloseFormCancel OnBeforeCreateEditor OnDragOver OnItemChanged SelectedRecordsChanged

3.3.8.1.1. События построения формы

Управление дополнительными ресурсами и данными при открытии формы.

OnLoadMeta
Frames:все
Mandatory:нет

При открытии фрейма, после загрузки метаданных. Можно использовать для внесения изменений в метаданные.

OnUnloadMeta
Frames:все
Mandatory:нет

При закрытии фрейма.

OnControllerCreated
Frames:все
Mandatory:нет

Сразу после того, как был создан фрейм отображения выборки. Это вовсе не означает, что Selection.Controller будет содержать объект, так как у некоторых фреймов нет контроллера, например, у Chart.

Эта операция аналогична OnShow, но срабатывает в том числе и при открытии интерфейсных элементов формы, которые были скрыты при открытии формы (например, закладки, которые не были первыми в перечне закладок).

BeforeClose
Frames:все
Mandatory:нет

Перед закрытием выборки.

AfterClose
Frames:все
Mandatory:нет

После закрытия выборки.

3.3.8.1.2. События обработки данных

Управление строками в хранилище строк.

InsertItem
Frames:все
Mandatory:нет

При добавлении записи (например, при добавлении строки в Grid, Tree).

DeleteItem
Frames:все
Mandatory:нет

При удалении записи (например, при удалении строки из Grid, Tree).

BeforeEdit_before
Frames:все
Mandatory:да, для изменения данных

В момент начала редактирования записи, перед BeforeEdit.

BeforeEdit
Frames:все
Mandatory:да, для изменения данных

В момент начала редактирования записи.

AfterEdit
Frames:все
Mandatory:нет

В момент выхода из режима редактирования записи.

3.3.8.1.3. Сеттеры

При изменении значений полей выборки. Используются для программирования бизнес логики.

3.3.8.1.4. Визуальные события

Реакция на пользовательские действия.

OnShow
Frames:все
Mandatory:нет

Перед показом фрейма.

OnFrameActivated
Frames:Grid, Tree, HTML
Mandatory:нет

При получении фокуса фреймом.

OnCloseFormQuery
Frames:все
Mandatory:нет

Перед закрытием фрейма до операций CloseFormOK и CloseFormCancel, давая возможность отменить закрытие фрейма.

Флаг закрытия фрейма передается в результат операции:

  • Result := False; - отменить закрытие
  • Result := True; - продолжить закрытие

В случае, если в выборке был не модально открыт файл через BlobOpenEx2 и не был закрыт до закрытия формы, то при отсутствии операции OnCloseFormQuery пользователю будет показан стандартный диалог, иначе будет вызвана операция.

CloseFormOK
Frames:все
Mandatory:нет

При успешном завершении и закрытии диалогового окна.

CloseFormCancel
Frames:все
Mandatory:нет

При отмене/безуспешном завершении диалогового окна.

OnFocusedFieldChanged
Frames:все
Mandatory:нет

После перехода фокуса ввода в списке или дереве с одного столбца на другой, а также при переходе с контрола на контрол в карточке или панели фильтров.

OnFocusedCellChanged
Frames:Grid, Tree
Mandatory:нет

После перехода фокуса ввода в списке с одной ячейки на другую.

OnBeforeCreateEditor
Frames:Grid, Tree
Mandatory:нет

При начале редактирования ячейки, как при создании редактирующего контрола, так и просто при изменении значения, например, у Checkbox-а.

OnShowEditor
Frames:Grid, Tree
Mandatory:нет

При показе редактирующего контрола (после OnBeforeCreateEditor). Если редактирующего контрола нет (например, при изменении значения CheckBox-а), то операция не выполняется.

OnShowCellComment
Frames:Grid, Tree
Mandatory:нет

При показе комментария ячейки.

SelectedRecordsChanged
Frames:Grid, Tree
Mandatory:нет

После изменения набора выделенных записей.

OnColumnHeaderClick
Frames:Grid
Mandatory:нет

При клике на заголовок колонки.

OnAfterNodeOpen
Frames:Tree
Mandatory:нет

После раскрытия узла в дереве.

3.3.8.1.5. События обработки зависимостей

3.3.8.1.6. Навигационные события по данным

3.3.8.1.7. Навигационные события по виду

CheckWorkability
Frames:все
Mandatory:нет

Базовая операция, предназначенная для актуализации состояния операций выборок, доступности к редактированию ее атрибутов. В данной операции крайне не рекомендуется использовать SQL блоки.

Вызывается автоматически в следующих случаях:

  • при открытии выборки (AfterOpen);
  • при переходе с записи на запись (AfterScroll);
  • при обновлении выборки (AfterRefresh);
  • при применении фильтра (клиентского или серверного) (ApplyFilter);
  • при отмене фильтра (клиентского или серверного) (ResetFilter);
  • после выполнения операции, для которой установлено свойство CWAAfter ("выполнять операцию применимости после операции").

В некоторых случаях вызовы блокируются:

  • когда происходит обновление мастера, у деталей происходит блокировка (кроме неактивных закладок, они закрываются), вызов происходит после завершения обновления мастера;
  • при вставке в грид текста или таблиц из Excel;
  • при множественном выделении в дереве и гриде, вызов происходит после выделения.
OnBeforeNavigate
Frames:HTML
Mandatory:нет

Перед переходом на другую страницу. Можно через GetVar() узнать значение переменной NavigateURL# - адрес перехода.

NavigateURL# можно изменить, тогда будет открыт браузер в новом окне по этой ссылке.

3.3.8.1.8. События запроса данных

BeforeOpen
Frames:все
Mandatory:нет

Перед выполнением запроса GetSqlText.

BeforeGetSqlText
Frames:все
Mandatory:нет

Непосредственно перед вызовом GetSqlText.

GetSqlText
Frames:все
Mandatory:да

Запрашивает данные по указанному SQL-запросу.

AfterOpen
Frames:все
Mandatory:нет

Сразу после GetSqlText.

AfterGetSqlText
Frames:все
Mandatory:нет

После GetSqlText (не непосредственно).

RefreshItem
Frames:все
Mandatory:нет

Обновляет одну запись.

3.3.8.1.9. События фильтра

OnFilterInit
Frames:все
Mandatory:нет

При инициализации фильтра, сразу после OnLoadMeta. Возвращаемое значение (Variant) будет передаваться входным параметром при последующих вызовах операций OnApplyFilter, OnResetFilter и OnAddSelectedRecToFilter.

OnApplyFilter
Frames:все
Mandatory:нет

Перед применением универсального фильтра выборки. Текст запроса, указанный в поле WhereMacro возвращаемого объекта будет приписан к имеющемуся макросу универсальной фильтрации.

Подробнее про события универсального фильтра: фильтрация серверная.

OnResetFilter
Frames:все
Mandatory:нет

Перед сбросом универсального фильтра выборки. Если возвращается результат, то он записывается вместо старого.

OnFilterFinalize
Frames:все
Mandatory:нет

При деинсталяции фильтра, непосредственно до OnUnloadMeta. Возвращение значения не предполагается.

OnAddSelectedRecToFilter
Frames:все
Mandatory:нет

Перед добавлением выделенных записей в условия фильтрации. Если возвращается непустой результат, то стандартное изменение запроса не производится (перекрывается). Запрос изменяется в соответствии с возвращенным значением.

3.3.8.1.10. Транзакционные события

Реакция на завершение или откат транзакции.

3.3.8.1.11. Валидационные события

3.3.8.1.12. События диаграммы Гантта

OnItemChanged
Frames:Gantt
Mandatory:нет

При окончании изменения размеров или перетаскивания элементов пользователем.

OnFocusedItemChanged
Frames:Gantt
Mandatory:нет

При выделении другого элемента.

OnLinkCreate
Frames:Gantt
Mandatory:нет

При добавлении связи между элементами.

OnLinkDelete
Frames:Gantt
Mandatory:нет

При удалении связи между элементами.

3.3.8.1.13. События планировщика

OnSelectionChanged
Frames:Scheduler
Mandatory:нет

При изменении выделения.

OnEventSelectionChanged
Frames:Scheduler
Mandatory:нет

При выделении события, щелчке на нём или снятии выделения с события.

OnDateNavigatorSelectionChanged
Frames:Scheduler
Mandatory:нет

При изменении выделенного (отображаемого) промежутка времени.

OnDateNavigatorPeriodChanged
Frames:Scheduler
Mandatory:нет

При изменении временного промежутка, отображаемого в уменьшенном виде на календаре в правой части планировщика.

OnEventAdd
Frames:Scheduler
Mandatory:нет

При создании события.

OnEditEvent
Frames:Scheduler
Mandatory:нет

При изменении события.

OnDeleteEvent
Frames:Scheduler
Mandatory:нет

При удалении события.

3.3.8.1.14. Перетаскивание строк и ячеек

OnCanStartDrag
Frames:Grid, Tree
Mandatory:нет

При начале перетаскивания строки с фрейма в ручном режиме. Эта возможность регулируется свойством фрейма "Перетаскивание строк с фрейма" (CanDragRows).

OnDragOver
Frames:Grid, Tree, AdvDiagram
Mandatory:нет

Во время перетаскивания строки с фрейма на фрейм в автоматическом режиме. Эта возможность регулируется свойствами:

  • CanDragRows - для фрейма, с которого перетаскивается строка,
  • CanDropRows - для фрейма, на который перетаскивается строка.

Операция будет выполняться для фрейма с установленным свойством CanDropRows = true во время перетаскивания строки, при каждом перемещении мышки над фреймом.

OnDragDrop
Frames:Grid, Tree, AdvDiagram
Mandatory:нет

При окончании перемещения строки на фрейм.

3.3.8.1.15. Прочие события

OnActivateEditor
Frames:все
Mandatory:нет

Если текущая выборка является выборкой выпадающего списка (LookupSelection), при ее открытии она пытается вызвать операцию OnActivateEditor своей мастер-выборки, передавая туда себя в качестве параметра. Предполагается, что в этой операции можно будет задать значение свойства UniFilterMacrosRO выборки выпадающего списка, тем самым, ограничив ее.

Таким образом, первый параметр операции - LookupSelection, второй - AttrName.

HandleEvents
Frames:все
Mandatory:нет

Обработчик событий из шины событий.

OnAfterBulkUpdate
Frames:Grid, Tree
Mandatory:нет

После вставки в список или древовидный список набора ячеек через буфер обмена из Excel.

OnClientFilterChanged
Frames:Grid
Mandatory:нет

При изменении клиентского фильтра в гриде.

OnFormActivatedAfterFindWindow
Frames:все
Mandatory:нет

Приходит при получении фокуса формой после её активации через вызов метода CreateFormEx(), если была активирована уже существовавшая форма.

3.3.8.2. Порядок вызова

Пример порядка вызова операций при открытии и закрытии формы, состоящей из одного списка:

Открываем форму:

  1. ONLOADMETA
  2. ONFILTERINIT
  3. BEFOREOPEN
  4. ONAPPLYFILTER
  5. BEFOREGETSQLTEXT
  6. GETSQLTEXT
  7. AFTEROPEN
  8. CHECKWORKABILITY
  9. AFTERGETSQLTEXT
  10. ONSHOW
  11. ONFRAMEACTIVATED

Закрываем форму:

  1. ONCLOSEFORMQUERY
  2. ONFILTERFINALIZE
  3. ONUNLOADMETA

Сохранение пользовательских настроек в реестр происходит при закрытии датасета выборки.

Восстановление - после вызова метода OnShow, непосредственно перед отрисовкой.