2.3.7. Паскаль события¶
2.3.7.1. Справочник¶
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: нет Перед показом фрейма.
See also
-
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;
<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>
See also
Всплывающие подсказки в ячейках
Свойства фрейма
CommentAttribute
,CommentTextAttribute
Класс
TbtkScriptHintController
-
SelectedRecordsChanged
¶ Frames: TbtkLookUpDBChartFrame
Frames: TbtkLookUpTreeFrame
Mandatory: нет После изменения набора выделенных записей.
-
OnColumnHeaderClick
¶ Frames: TbtkLookUpDBChartFrame
Mandatory: нет При клике на заголовок колонки.
-
OnAfterNodeOpen
¶ Frames: TbtkLookUpTreeFrame
Mandatory: нет После раскрытия узла в дереве.
-
BeforePaste
¶ Frames: TbtkLookUpDBChartFrame
Frames: TbtkLookUpTreeFrame
Mandatory: нет Перед вставкой из буфера обмена
Note
Событие не сработает, если вставка происходит в активный редактор.
See also
New in version Global: 5.12.0_ms4
-
AfterPaste
¶ Frames: TbtkLookUpDBChartFrame
Frames: TbtkLookUpTreeFrame
Mandatory: нет После вставки из буфера обмена
Note
Событие не сработает, если вставка происходит в активный редактор. Событие сработает, даже если в процессе вставки произошла ошибка.
See also
New in version Global: 5.12.0_ms4
-
AfterPasteRow
¶ Frames: TbtkLookUpDBChartFrame
Frames: TbtkLookUpTreeFrame
Mandatory: нет После вставки в каждую строку из буфера обмена. Событие не сработает, если в процессе вставки произошла ошибка.
Note
Событие не сработает, если вставка происходит в активный редактор.
See also
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. Такое поведение опасно и может привести к непредсказуемым ошибкам.
- при открытии выборки (
Frames: TbtkLookUpHTMLViewerFrame
Mandatory: нет Перед переходом на другую страницу. Можно через
GetVar()
узнать значение переменной NavigateURL# - адрес перехода.NavigateURL# можно изменить, тогда будет открыт браузер в новом окне по этой ссылке.
2.3.7.1.8. События запроса данных¶
-
BeforeOpen
¶ Frames: все Mandatory: нет Перед выполнением запроса
GetSqlText
.See also
-
BeforeGetSqlText
¶ Frames: все Mandatory: нет Непосредственно перед вызовом
GetSqlText
.See also
-
GetSqlText
¶ Frames: все Mandatory: да Запрашивает данные по указанному SQL-запросу.
See also
-
AfterOpen
¶ Frames: все Mandatory: нет Сразу после
GetSqlText
.See also
-
AfterGetSqlText
¶ Frames: все Mandatory: нет После
GetSqlText
(не непосредственно).See also
-
RefreshItem
¶ Frames: все Mandatory: нет Обновляет одну запись.
2.3.7.1.9. События фильтра¶
See also
-
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: нет При выделении события, щелчке на нём или снятии выделения с события.
Frames: Scheduler Mandatory: нет При изменении выделенного (отображаемого) промежутка времени.
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. Порядок вызова¶
Пример порядка вызова операций при открытии и закрытии формы, состоящей из одного списка:
Открываем форму:
- ONLOADMETA
- ONFILTERINIT
- BEFOREOPEN
- ONAPPLYFILTER
- BEFOREGETSQLTEXT
- GETSQLTEXT
- AFTERGETSQLTEXT
- AFTEROPEN
- CHECKWORKABILITY
- ONCONTROLLERCREATED
- ONSHOW
- ONFRAMEACTIVATED
Закрываем форму:
- ONCLOSEFORMQUERY
- ONFILTERFINALIZE
- ONUNLOADMETA
Сохранение пользовательских настроек в реестр происходит при закрытии датасета выборки.
Восстановление - после вызова метода OnShow, непосредственно перед отрисовкой.
2.3.7.2.1. События Дерева¶
-
OpenAllNodes
¶ Frames: TbtkLookUpTreeFrame
Mandatory: нет Вызывается в курсорном дереве с макросом “Select” для раскрытия всего дерева. При отсутствии операции раскрываются только прогруженные узлы.
-
OpenAllNodesToLevel
¶ Frames: TbtkLookUpTreeFrame
Mandatory: нет Вызывается в курсорном дереве с макросом “Select” для раскрытия всего дерева до определённого уровня. Уровень передаётся аргументом скрипта. При отсутствии операции раскрываются только прогруженные узлы.
-
OpenNodesDown
¶ frames: TbtkLookUpTreeFrame
mandatory: нет Вызывается в курсорном дереве с макросом “Select” для раскрытия узла с подузлами. При отсутствии операции раскрываются только прогруженные узлы.