На главную   На главную   Форумы Новости Документация Скачать Купить  
Регистрация  
Система Allegro
Oб Allegro Характеристики Пример конфигурации Документация База ошибок Развитие
Версия для печати К списку книг Вернуться к оглавлению Предыдущий параграф Следующий параграф
Поиск по книге

Глава 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 нужно помнить, что если Вы назначите несколько обработчиков на событие с одинаковым именем, то сработают они все, причем в произвольном порядке.



Система Allegro. Руководство разработчика Наверх