Глава 12. РАЗРАБОТКА ОКОННОГО ИНТЕРФЕЙСА
Компонент глобальных событий TAllegroEvents
Компонент TAllegroEvents используется для обработки глобальных событий в системе Allegro
. В основном этот компонент предназначен для работы в составе
глобальных модулей конфигурации. Эти модули бывают загружены постоянно.
Свойства Published |
тип |
Назначение |
EventNames |
string |
список имен всех событий, на которые должен среагировать компонент
, указанные через точку с запятой |
События |
тип |
Назначение |
OnEvent |
TAllegroEvent |
происходит при возникновении глобального события с именем, которое присутствует
в свойстве EventNames |
TAllegroEvent = procedure(const EventName: string;
InputParams: variant; var OutputParams: variant) of object;
Если на событие OnEvent назначен обработчик, то при вызове
этого обработчика в него передаются:
- имя события (string)
- входные параметры (Variant или Variant array)
- выходные параметры (Variant или Variant array)
Вызвать глобальное событие можно с помощью процедуры CallAllegroEvent:
procedure CallAllegroEvent(const EventName: string;
InputParams: variant; var OutputParams: variant);
Имеется ряд системных событий Allegro:
OnGlobalScriptError, OnScriptError, OnInterBaseError, OnException,
RefBeforePost, RefBeforeDelete, DocBeforeDelete
GaapBeforeMakeEntries, GaapBeforeCommit
AfterLogon, CreateReferencedEnabled, CreateReferenced,
OnBalanceAccDblClick, OnShowRelatedDocuments
Внимание! Если при вызове события передавается один параметр,
то он передается просто как тип Variant, и только
если число параметров больше одного, они передаются как массив
Varraint array.
Свойство EventNames можно редактировать в инспекторе объектов вручную, а
можно вызвать редактор свойства, нажав на кнопку с многоточием
. Редактор свойства позволяет не только вводить новые имена событий
, но и использовать имеющиеся системные события Allegro:
Рассмотрим каждое системное событие подробнее.
Событие OnScriptError - происходит при ошибке в скриптовой системе,
кроме ошибок в глобальных модулях.
Входные параметры |
тип |
Назначение |
0 |
string |
Текст сообщения об ошибке скриптера |
1 |
string |
Имя файла скриптового модуля, в котором произошла ошибка |
2 |
string |
Дополнительные сведения об ошибке, например, имя класса ошибки |
3 |
integer |
Номер строки скриптового модуля |
4 |
integer |
Номер символа в строке |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то высвечивается
системное сообщение об исключительной ситуации, если True, то
это сообщение подавляется. |
Событие OnGlobalScriptError - происходит при любой ошибке в глобальных модулях
.
Входные параметры |
тип |
Назначение |
0 |
string |
Текст сообщения об ошибке скриптера |
1 |
string |
Имя файла скриптового модуля, в котором произошла ошибка |
2 |
string |
Дополнительные сведения об ошибке, например, имя класса ошибки |
3 |
integer |
Номер строки скриптового модуля |
4 |
integer |
Номер символа в строке |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то высвечивается
системное сообщение об исключительной ситуации, если True, то
это сообщение подавляется. |
Событие OnInterBaseError - происходит при ошибках сервера IB (например
, при нарушениях уникального ключа, генерации исключительных ситуаций и
т.п.).
Входные параметры |
тип |
Назначение |
0 |
string |
Текст сообщения об ошибке сервера |
1 |
string |
Текст сообщения Allegro об этой ошибке (возможно, переведенный
на русский язык или уточненный) |
2 |
integer |
Код ошибки IBErrorCode |
3 |
integer |
Код ошибки SQLCode |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то высвечивается
системное сообщение об исключительной ситуации, если True, то
это сообщение подавляется. |
Событие OnException - происходит при ошибках самого Allegro).
Входные параметры |
тип |
Назначение |
0 |
string |
Текст сообщения об ошибке E.Message |
1 |
string |
Класс ошибки E.ClassName |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то высвечивается
системное сообщение об исключительной ситуации, если True, то
это сообщение подавляется. |
Событие RefBeforePost - происходит перед сохранением объекта в справочнике.
Входные параметры |
тип |
Назначение |
0 |
string |
Имя таблицы справочника |
1 |
TRefQuery |
Компонент справочника |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то запись
сохраняется в базе данных, если True, то сохранение
отменяется (Abort). |
Событие RefBeforeDelete - происходит перед удалением объекта из справочника.
Входные параметры |
тип |
Назначение |
0 |
string |
Имя таблицы справочника |
1 |
integer |
ID объекта |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то запись
удаляется, если True, то удаление записи отменяется (
Abort). |
Событие DocBeforeDelete - происходит перед удалением документа.
Входные параметры |
тип |
Назначение |
0 |
TIBTransaction |
Компонент транзакции |
1 |
string |
Имя таблицы документа |
2 |
string |
Отформатированное имя документа |
3 |
integer |
ID документа |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то документ
удаляется, если True, то удаление отменяется (Abort
). |
Событие GaapBeforeMakeEntries - происходит перед проведением ручной операции.
Входные параметры |
тип |
Назначение |
0 |
TIBTransaction |
Компонент транзакции |
1 |
integer |
ID документа |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то операция
проводится, если True, то операция отменяется (Abort
). |
Событие GaapBeforeCommit - происходит перед подтверждением транзакции ручной операции.
Входные параметры |
тип |
Назначение |
0 |
TIBTransaction |
Компонент транзакции |
1 |
integer |
ID документа |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то транзакция
подтверждается, если True, то ничего не происходит (
Abort). |
Событие CreateReferencedEnabled происходит каждый раз перед появлением контекстного меню «
Проводника по документам».
Входные параметры |
тип |
Назначение |
0 |
integer |
DOC_TYPE_ID идентификатор типа текущего документа в
«Проводнике по документам» |
1 |
integer |
DOC_ID идентификатор текущего документа в «Проводнике по
документам» |
2 |
integer |
DIR_ID текущая папка в «Проводнике по документам
» |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если False (по умолчанию - так), то пункт
меню Создать на основании… изображается невыбираемым, если конфигурация
вернет True, то этот пункт контекстного меню будет выбираем
и при «нажатии» на этот пункт меню пользователь
спровоцирует событие CreateReferenced («Создать на основании»), которое конфигурация
должна соответствующим образом обработать. |
Событие CreateReferenced происходит, когда пользователь «нажал» пункт
Создать на основании… контекстного меню в «Проводнике по
документам». Для работы этого механизма необходимо предварительно также реализовать
обработку события CreateReferencedEnabled, иначе этот пункт меню окажется неактивным
.
Входные параметры |
тип |
Назначение |
0 |
integer |
DOC_TYPE_ID идентификатор типа текущего документа в
«Проводнике по документам» |
1 |
integer |
DOC_ID идентификатор текущего документа в «Проводнике по
документам» |
2 |
integer |
DIR_ID текущая папка в «Проводнике по документам
» |
Выходные параметры |
тип |
Назначение |
|
variant |
Не используется |
Событие OnBalanceAccDblClick происходит при двойном щелчке на счетах нижнего уровня
в окне «Баланс».
Входные параметры |
тип |
Назначение |
0 |
integer |
ACC_ID идентификатор счета |
1 |
integer |
LAYER_ID идентификатор слоя |
2 |
variant |
Резервный параметр |
Выходные параметры |
тип |
Назначение |
|
boolean |
Если конфигурация обработала это событие, то она должна присвоить
этому параметру True. |
Событие OnShowRelatedDocuments происходит при «нажатии» на пункт меню
«Ссылающиеся документы» в контекстном меню «Проводника по
документам» или соответствующей кнопке в окне «Ручной операции
».
Входные параметры |
тип |
Назначение |
0 |
TIBTransaction |
Компонент транзакции |
1 |
string |
TABLE_NAME - название главной таблицы документа |
2 |
string |
DOC_NAME – отформатированное название документа |
3 |
integer |
DOC_ID – идентификатор документа |
4 |
integer |
DOC_TYPE_ID – идентификатор типа документа |
5 |
integer |
DIR_ID – папка «Проводника по документам» |
Выходные параметры |
тип |
Назначение |
0 |
boolean |
Если False (по умолчанию - так), то вызывается
системное окно «Документы, ссылающиеся на данный», если
присвоить True, то системное окно не вызывается. |
1 |
boolean |
Если конфигурация возвращает True, это означает, что исходный
документ был модифицирован в контексте транзакции и следует принять решение
о подтверждении или откате транзакции (используется при вызове события
из окна «Ручной операции»). |
Событие AfterLogon- происходит после соединения с базой данных.
Используется для отображения заставки. Входные и выходные параметры имеют
значение NULL.
Организовать вывод заставки при соединении с базой данных несложно.
Нужно создать форму, разместить на ней компонент Image и
загрузить в него картинку. Затем нужно поместить на эту
форму таймер, в котором установить интервал отображения картинки в
миллисекундах и свойству Enabled таймера присвоить False.
Затем нужно создать два обработчика – один у формы,
который запустит таймер, другой у таймера, который закроет
форму:
procedure TSplashForm.FormShow(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TSplashForm.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Close;
end;
Теперь осталось создать глобальный модуль, если его еще нет
, расположить на нем компонент AllegroEvents, его свойству EventNames
присвоить значение AfterLogon, и создать обработчик события OnEvent:
procedure TDataModule1.AfterLogonEvent(const EventName: String;
InputParams: Variant; var OutputParams: Variant);
begin
UseUnit('SplashUnit.pas'); //загружаем модуль с формой
SplashForm.ShowModal; //высвечиваем форму
UnloadUnit(' SplashUnit.pas'); //выгружаем модуль с формой
end;
При работе с событиями Allegro нужно помнить, что если
Вы назначите несколько обработчиков на событие с одинаковым именем,
то сработают они все, причем в произвольном порядке.
|