Вы можете использовать функцию AEVENTS( ) для получения числа существующих привязок событий.

AEVENTS( ArrayName [, 0 | 1 | oEventObject ] )

Параметры

ArrayName

Указывает имя массива, который содержит результаты вызова функции AEVENTS( ).

0

Указывает, что AEVENTS( ) возвращает трехэлементный массив, содержащий объектную ссылке на текущий источник события, наименование сработавшего события и как было инициировано событие.

Колонка Описание Тип

1

Источник события

Объектная ссылка

2

Событие

Строка

3

Тип события или как было инициировано событие.

0 - системное

1 - в результате вызова RAISEEVENT()

2 - в результате вызова метода

Третий элемент массива указывает, как было инициировано событие. Если событие является свойством, то это значение может быть равно 1 или 2. Зачение равно 2 если свойству устанавливалось или присваивалось значение.

1

Указывает, что AEVENTS( ) возвращает четырехколоночный массив, содержащий информацию о событиях Windows Message (Win Msg).

Массив содержит одну строку на каждую привязку. Привязки создаются с помощью функции BINDEVENT().

В приведенной ниже таблице описывается содержание каждой колонки в массиве.

Колонка Описание Тип

1

hWnd

Целочисленное

2

Window Message

Целочисленное

3

Ссылка обработчика

Объектная ссылка

4

Делегат обработчика

Строка

oEventObject

Указывает на объектную ссылку. Ели вы указали объектную ссылку, то AEVENTS() возвращает пятиколоночный массив, который содержит срабатовшие события и методы-делегаты для oEventObject. Каждая строка в ArrayName представляет привязку. В приведенной ниже таблице описывается информация, содержащаяся в каждой из пяти колонок.

Колонка Описание Тип

1

.T. если второй элемент является источником события

.F. если второй элемент является обработчиком события

Логическое

2

Источник события, если вы посылаете обработчик события в oEventObject; в противном случае, обработчик события, если вы посылаете источник события в oEventObject.

Объектная ссылка

3

Событие

Строка

4

Метод-делегат

Строка

5

флаги BINDEVENT()

Целочисленное

Когда вы посылаете oEventObject, число привязок, возвращаемое AEVENTS( ) должно быть равно число несвязанных событий, возвращаемый функцией UNBINDEVENTS( ), когда посылаем только параметр oEventObject.

Expand imageВозвращаемое значение

Численный тип. AEVENTS( ) возвращает число строк в указанном массиве. Обычно, число представляет собой число привязок событий. Однако, если вы пошлете нуль (0), тогда AEVENTS( ) возвратит 3.

Expand imageПримечания

Если AEVENTS() возвращает 0 и массив не существует, то Visual FoxPro не создает массив. Visual FoxPro изменяет или переписывает существующий массив только в том случае, если возвращается действительный результат. Массив остается неизменным при следующих условиях:

  • Не существует событий.

  • Вы указали значение 0 в качестве второго параметра, и AEVENTS( ) не появляется с событием или oEventObject не имеет привязок.

Expand imageПример

Приведенный ниже пример показывает, как использовать AEVENTS( ) для получения числа существующих привязок события. BINDEVENTS( ) удерживает Class Browser помещенный с правой стороны рабочего стола Visual FoxPro, независимо от того, как меняются размеры рабочего стола. Для получения более подробной информации, смотрите описание функции BINDEVENT().

UNBINDEVENTS( ) отсоединяет событие Resize систмной переменной _SCREEN от объекта oHandler. AEVENTS( ) возвращает число привязок событий до BINDEVENT( ) и после UNBINDEVENTS( ) в массиве с именем myArray:

  CopyCode imageСкопировать код
PUBLIC oHandler
oHandler=NEWOBJECT("myhandler")
DO (_browser)

BINDEVENT(_SCREEN,"Resize",oHandler,"myresize")
AEVENTS(myArray,oHandler)
numRows=ALEN(myArray,1)
numCols=ALEN(myArray,2)
WAIT "Rows in array after binding: " + TRANSFORM(numRows) WINDOW AT 20,20
WAIT "Cols in array after binding: " + TRANSFORM(numCols) WINDOW AT 20,20
FOR count1 = 1 TO numRows
   FOR count2 = 1 TO numCols
      WAIT myArray[count1,count2] WINDOW AT 20,20
   ENDFOR
ENDFOR

* Закомментируйте следующую строку кода для того, чтобы увидеть сохраняемые привязки события.
UNBINDEVENTS(_SCREEN,"Resize",oHandler,"myresize")
AEVENTS(myArray,oHandler)

* Проверька создания и заполнения нового массива функцией AEVENTS().
IF VARTYPE(myArray) <> U
   * Приведенный ниже код не исполняется если событие не привязано, так как
   * AEVENT( ) не создает нового массива если возвращен 0. 
   * Для исполнения приведенногон ниже кода смотрите содержание нового массива,
   * раскомментируйте предложение UNBINDEVENTS().
   numRows=ALEN(myArray,1)
   numCols=ALEN(myArray,2)
   WAIT "Rows in array after unbinding: " + TRANSFORM(numRows) ;
      WINDOW AT 20,20
   WAIT "Cols in array after unbinding: " + TRANSFORM(numCols) ;
      WINDOW AT 20,20
   FOR count1 = 1 TO numRows
      FOR count2 = 1 TO numCols
         WAIT myArray[count1,count2] WINDOW AT 20,20
      ENDFOR
   ENDFOR
ENDIF

DEFINE CLASS myhandler AS Session
   PROCEDURE myresize
   _obrowser.left = _SCREEN.Width - _obrowser.width
   RETURN
ENDDEFINE

Expand image Смотрите также