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

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

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

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

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

OnLoadMeta
Frames:все
Mandatory:нет

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

OnUnloadMeta
Frames:все
Mandatory:нет

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

OnControllerCreated
Frames:все
Mandatory:нет

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

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

BeforeClose
Frames:все
Mandatory:нет

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

AfterClose
Frames:все
Mandatory:нет

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

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

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

InsertItem
Frames:все
Mandatory:нет

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

DeleteItem
Frames:все
Mandatory:нет

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

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

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

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

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

AfterEdit
Frames:все
Mandatory:нет

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

2.3.7.1.3. Сеттеры

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

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

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

OnShow
Frames:все
Mandatory:нет

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

OnFrameActivated
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Frames:TbtkLookUpHTMLViewerFrame
Mandatory:нет

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

OnCloseFormQuery
Frames:все
Mandatory:нет

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

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

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

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

Warning

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

CloseFormOK
Frames:все
Mandatory:нет

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

CloseFormCancel
Frames:все
Mandatory:нет

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

OnFocusedFieldChanged
Frames:все
Mandatory:нет

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

OnFocusedCellChanged
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

OnBeforeCreateEditor
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

OnShowEditor
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

OnShowCellComment
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

Ячейки, в которых будут выводиться комментарии, задаются с помощью свойства CommentAttribute.

Если текст комментария уже задан с помощью свойства CommentTextAttribute, операция всё равно вызывается.

Текст подсказки для ячейки задаётся по имени атрибута и идентификатору записи (id).

Если текст подсказки зависит от значений атрибутов записи, то требуется выполнение запроса.

Получение данных о ячейке, для которой вызвана операция
hints := Selection.Controller.Hints;
attrName := hints.AttributeName;
id := hints.RecordId;
Пример операции OnShowCellComment
<PASCAL>
  hints := Selection.Controller.Hints;
  attrName := hints.AttributeName;
  id := hints.RecordId;

  if hints.GetHint(attrName, id) = '' then
    hints.PutHint(attrName, id, Format('Подсказка для %s_%s', [attrName, id]));
</PASCAL>
Пример операции с использованием запроса для отображения подсказки
<sql>
  <GetHint>
    [out Hint]
    begin
      if :spAttr = upper('BMANUALPLANIMAGE') then
        select case
                 when t.bManualPlan = 1
                 then 'Режим ручного планирования работы'
                 else 'Режим автоматического планирования работы'
               end
          into :hint
          from (select bManualPlan
                  from pro_action
                 where id = :InId
                 union all
                select bManualPlan
                  from pro_project
                 where id = :InId
               ) t;

      elsif :spAttr = upper('NIMAGE') then --img типа работы
        select sCaption
          into :hint
          from (
            select at.sCaption
              from pro_action a
                  ,pro_actiontype at
             where a.id = :InId
               and at.id = a.idactiontype
             union all
            select pt.sCaption
              from pro_project p
                  ,pro_projecttype pt
             where p.id = :InId
               and pt.id = p.idProjectType
               );
      end if;
    end;
  </GetHint>
</sql>
<PASCAL>
  hints := Selection.Controller.Hints;
  attrName := hints.AttributeName;
  id := hints.RecordId;

  v := ExecSQLEx('GetHint', 'Hint;InId;spAttr', [ftString, ftFloat, ftString], ['', id, attrName]);
  hints.PutHint(attrName, id, VarToStr(v[0]));
</PASCAL>
Проблемы с выводом подсказки
<PASCAL>
  hints := Selection.Controller.Hints;
  attrName := hints.AttributeName;
  id := hints.RecordId;

  if hints.GetHint(attrName, id) = '' then
  begin
    // Формируем текст подсказки.
    // . . .
    // 1) Если '' - корректный текст подсказки, то этот блок кода будет выполняться при каждом наведении на ячейку.
    //    В таком случае можно исключить этот атрибут из CommentAttribute данной записи.
  end
  else
  begin
    // Текст подсказки уже сформирован, ничего не делаем.
    // . . .
    // 2) Запись могла измениться, а подсказка останется старой. На данный момент при Refresh / RefreshItem текст подсказки не очищается.
  end;
</PASCAL>
SelectedRecordsChanged
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

OnColumnHeaderClick
Frames:TbtkLookUpDBChartFrame
Mandatory:нет

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

OnAfterNodeOpen
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

BeforePaste
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

Перед вставкой из буфера обмена

Note

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

New in version Global: 5.12.0_ms4

AfterPaste
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

После вставки из буфера обмена

Note

Событие не сработает, если вставка происходит в активный редактор. Событие сработает, даже если в процессе вставки произошла ошибка.

New in version Global: 5.12.0_ms4

AfterPasteRow
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

После вставки в каждую строку из буфера обмена. Событие не сработает, если в процессе вставки произошла ошибка.

Note

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

New in version Global: 5.12.0_ms4

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

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

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

CheckWorkability
Frames:все
Mandatory:нет

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

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

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

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

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

Attention

Крайне нежелательно изменять активность выборки в момент выполнения CheckWorkability. Такое поведение опасно и может привести к непредсказуемым ошибкам.

OnBeforeNavigate
Frames:TbtkLookUpHTMLViewerFrame
Mandatory:нет

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

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

2.3.7.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:нет

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

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

OnFilterInit
Frames:все
Mandatory:нет

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

OnApplyFilter
Frames:все
Mandatory:нет

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

OnResetFilter
Frames:все
Mandatory:нет

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

OnFilterFinalize
Frames:все
Mandatory:нет

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

OnAddSelectedRecToFilter
Frames:все
Mandatory:нет

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

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

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

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

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

OnItemChanged
Frames:TbtkLookUpGanttTreeTabFrame
Mandatory:нет

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

See also

Элемент диаграммы Гантта

OnFocusedItemChanged
Frames:TbtkLookUpGanttTreeTabFrame
Frames:TbtkLookUpAdvDiagramFrame
Mandatory:нет

В GanttTreeTabFrame срабатывает при изменении выделения. Если выделен элемент, в переменной выборки IDFocusedItem# содержится его идентификатор, в противном случае null.

В AdvDiagramFrame срабатывает при изменении фокуса элементов диаграммы. Также срабатывает на потерю фокуса.

See also

Элемент диаграммы Гантта

OnLinkCreate
Frames:TbtkLookUpGanttTreeTabFrame
Mandatory:нет

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

Можно настроить добавляемую связь.

See also

Связь диаграммы Гантта

OnLinkDelete
Frames:TbtkLookUpGanttTreeTabFrame
Mandatory:нет

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

See also

Связь диаграммы Гантта

OnScaleChanged
Frames:TbtkLookUpGanttTreeTabFrame
Mandatory:нет

При изменении масштаба таймлайна.

New in version Global: 5.7

OnScaleMoved
Frames:TbtkLookUpGanttTreeTabFrame
Mandatory:нет

При изменении границ таймлайна.

New in version Global: 5.7

OnDoubleClick
Frames:TbtkLookUpGanttTreeTabFrame
Mandatory:нет

При двойном щелчке на элементе диаграммы.

2.3.7.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:нет

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

2.3.7.1.14. События DBChart фрейма

OnSeriesSelected
Frames:TbtkLookUpDBChartFrame
Mandatory:нет

При одиночном клике левой кнопкой мыши на серию графика. В операции можно получить системное имя серии из параметра выборки “SeriesSelected”.

Deprecated since version Global: 5.7.0_ms_5 Новый обработчик - OnSeriesClick.

OnSeriesClick
Frames:TbtkLookUpDBChartFrame
Mandatory:нет

При одиночном клике левой кнопкой мыши на серию графика. В операции можно получить системное имя серии из параметра выборки “SeriesSelected”.

New in version Global: 5.7.0_ms_5

OnSeriesDoubleClick
Frames:TbtkLookUpDBChartFrame
Mandatory:нет

При двойном клике левой кнопкой мыши на серию графика. В операции можно получить системное имя серии из параметра выборки “SeriesSelected”.

New in version Global: 5.7.0_ms_5

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

OnCanStartDrag
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

OnDragOver
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Frames:TbtkLookUpAdvDiagramFrame
Mandatory:нет

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

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

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

OnDragDrop
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Frames:TbtkLookUpAdvDiagramFrame
Mandatory:нет

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

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

OnActivateEditor
Frames:все
Mandatory:нет

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

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

HandleEvents
Frames:все
Mandatory:нет

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

OnAfterBulkUpdate
Frames:TbtkLookUpDBChartFrame
Frames:TbtkLookUpTreeFrame
Mandatory:нет

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

OnClientFilterChanged
Frames:TbtkLookUpDBChartFrame
Mandatory:нет

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

OnFormActivatedAfterFindWindow
Frames:все
Mandatory:нет

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

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

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

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

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

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

  1. ONCLOSEFORMQUERY
  2. ONFILTERFINALIZE
  3. ONUNLOADMETA

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

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

2.3.7.2.1. События Дерева

OpenAllNodes
Frames:TbtkLookUpTreeFrame
Mandatory:нет

Вызывается в курсорном дереве с макросом “Select” для раскрытия всего дерева. При отсутствии операции раскрываются только прогруженные узлы.

OpenAllNodesToLevel
Frames:TbtkLookUpTreeFrame
Mandatory:нет

Вызывается в курсорном дереве с макросом “Select” для раскрытия всего дерева до определённого уровня. Уровень передаётся аргументом скрипта. При отсутствии операции раскрываются только прогруженные узлы.

OpenNodesDown
frames:TbtkLookUpTreeFrame
mandatory:нет

Вызывается в курсорном дереве с макросом “Select” для раскрытия узла с подузлами. При отсутствии операции раскрываются только прогруженные узлы.