Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [ 44 ] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Это первое событие в последовательности событий при создании объекта. Обычно событие Init используется для получения параметров из вызывающей процедуры Param1, Param2, и выполнения установочных действий типа считывания нужных данных и т. п.

Сказанное выше правильно для всех рассматриваемых в книге средств разработки, но нет полной радости у программиста. В Visual FoxPro упомянутое выше событие называется Init, а в Visual Basic примерно аналогичное событие называется Initialize. При этом процедура для описания действий, которые должны произойти при наступлении события, в Visual Basic имеет следующую структуру:

Private Sub ObjectName EventName(<<Параметры>>)

<<Описание переменных и констант>>

<<Операторы>> End Sub

Имя события указывается после имени объекта, которому оно соответствует, и отделяется знаком подчеркивания. Тогда для события заголовок процедуры должен быть написан так:

Private Sub Object Initialize()

В Visual Basic это событие может относиться только к форме и объекту ClassModule.

Событие Init всегда выполняется сначала для объекта, включенного в объект-контейнер, и лишь затем для самого объекта-контейнера. Если событие Init возвращает значение .F., то объект не будет создан. Например, если мы создадим форму, в которой собираемся работать с данными из какой-либо таблицы, а файла таблицы нет на диске, то следующий пример, написанный на Visual FoxPro, показывает, как в этом случае можно избежать загрузки формы.

oFrm = CREATEOBJECT("frmLook") && Создаем объект формы IF type("oFrm") != "O"

RETURN ENDIF

oFrm.Show && Выводим ее на экран

READ EVENTS && Включаем состояние ожидания

* Описываем класс формы

DEFINE CLASS frmLook AS Form

ScaleMode = 3 && Координаты в пикселях

Width = 320 && Ширина

Heigth = 200 && Высота

Closable = .F. && Закрытие только кнопкой

* Добавляем объект Grid, с помощью которого будем выводить данные ADD OBJECT grdCustomer AS Grid WITH ;

RecordSource = "Customer", ; RecordSourceType = 1

* Добавляем кнопку для выхода из формы ADD OBJECT cmdExit AS CommandButton WITH ;

Caption = "Выход", ;

Top = 220, ; Left = 100

* Описываем действия при создании объекта Grid - проверка файла PROCEDURE grdCustomer.Init

IF !FILE("CUSTOMER.DBF")

= MESSAGEBOX("Файл данных не найден!") RETURN .F.

ELSE

IF USED("CUSTOMER")

SELECT CUSTOMER

ELSE

USE CUSTOMER IN 0 ENDIF ENDIF ENDPROC

* Описываем действия при щелчке мышкой на кнопке

PROCEDURE cmdExit.Click

CLEAR EVENT && Отменяем состояние ожидания

ENDPROC ENDDEFINE



Последним событием при существовании объекта является событие Destroy. Это событие обычно используется для выполнения завершающих действий при работе с объектом, например, запись измененых данных и т. п.

Аналогично событию Init и его примерному аналогу в Visual Basic - Initialize, для события Destroy в Visual Basic существует примерный аналог - событие Terminate.

Одним из наиболее часто используемых событий для управления работой программы является событие Click. Это событие происходит, когда пользователь:

• Щелкает левой кнопкой мыши на элементах управления CheckBox, CommandButton или Optionbutton, на пустом месте формы или в области ввода данных элемента управления Spinner.

• Выбирает пункт в списке элементов управления Combobox или ListBox.

• Нажимает клавишу Space (Пробел), когда активен элемент управления CheckBox, CommandButton или OptionButton.

• Нажимает клавишу Enter, когда один из элементов управления CommandButton имеет свойство Default, равное .T.

• Нажимает "горячую клавишу", определенную для какого-либо элемента управления.

Событие Click наступает также, когда выполняются следующие действия в программе:

• Значение свойства Value элементов управления CommandButton или Optionbutton устанавливается в значение .T. или 1 для OptionButton.

• Изменяется значение свойства Value элемента управления CheckBox.

• Выполняется команда MOUSE.

Событие DblClick происходит, когда пользователь дважды быстро нажимает и отпускает левую кнопку мыши на каком-либо объекте. Для объектов ComboBox и ListBox это событие происходит также при выборе какого-либо пункта из списка и нажатии при этом клавиши Enter. При привязке каких-либо действий к событию DblClick следует помнить, что пользователи не всегда могут четко выполнить данное действие и двойной щелчок может быть воспринят системой как два одинарных щелчка, выполненных с небольшим интервалом.

При выборе объекта, то есть при установке на него курсора, для этого объекта выполняется событие GotFocus. Это же событие выполняется при использовании в программе метода SetFocus. Следует учесть, что стать активным объект может, только если его свойства Enabled и Visible равны .T..

Когда пользователь выбирает другой объект в форме для дальнейшей работы, текущий объект деактивизируется и для него происходит событие LostFocus.

Следующее событие происходит для каждого объекта, размещенного на странице формы (Page), когда эта страница активизируется или деактивизируется.

PROCEDURE Object.UIEnable

LPARAMETERS lEnabled

Параметр lEnabled может иметь значение .T. или .F., что будет свидетельствовать о, соответственно, активизации или деактивизации страницы, на которой расположен объект. Таким образом, это событие позволяет предпринимать какие-либо действия с элементом управления, например, обновлять данные при переходе пользователя на новую страницу в форме.

Во время редактирования данных при каждом изменении пользователем значения свойства Value элемента управления происходит событие InteractiveChange для редактируемого элемента. Если изменение значения произведено из программы, для элемента управления происходит событие ProgrammaticChange.

В Visual Basic эти функции приходится выполнять одному событию - Change. Его синтаксис:

Private Sub Object Change([Index As Integer])

Параметр Index позволяет получить номер объекта, если он включен в массив элементов управления.

Для элементов управления, предусматривающих ввод данных, при нажатии и отпускании клавиши клавиатуры происходит событие KeyPress. Его синтаксис в Visual FoxPro выглядит так:

PROCEDURE Object.KeyPress

LPARAMETERS nKeyCode, nShiftAltCtrl



Параметр nKeyCode возвращает код нажатой клавиши, совпадающий с кодом, возвращаемым функцией INKEY(). Параметр nShiftAltCtrl возвращает признак нажатия дополнительной клавиши. Клавиша Shift имеет код 1, Ctrl - 2, Alt - 4. Таким образом, если этот параметр имеет значение 1 - при вводе удерживалась клавиша Shift, если 6 - удерживались клавиши Ctrl и Alt.

В Visual Basic это событие имеет следующий синтаксис:

Private Sub Form KeyPress(Keyascii As Integer)

Параметр Keyascii возвращает числовой ASCII-код, который передается по ссылке. Следующий пример позволяет преобразовывать все вводимые в текстовое поле символы в верхний регистр:

Private Sub Text1 KeyPress (KeyAscii As Integer)

Char = Chr(KeyAscii) KeyAscii = Asc(UCase(Char)) End Sub

Помимо этого события в Visual Basic есть еще два события, которые позволяют отслеживать работу пользователя с клавиатурой. Это событие KeyDown - срабатывает при нажатии клавиши и KeyUp - при ее отпускании. Эти события могут обрабатываться совершенно аналогично событию KeyPress в Visual FoxPro, то есть с их помощью можно отслеживать нажатие и комбинаций клавиш.

Для большинства элементов управления в Visual FoxPro перед их активизацией возможность перехода в этот элемент управления проверяется с помощью события When. Если это событие возвращает .T. (по умолчанию), то управление передается на этот элемент управления и возникает следующее событие GotFocus. Если событие When возвращает .F., то этот элемент управления не активизируется. Для объекта типа List событие When возникает всякий раз, когда пользователь перемещается между пунктами в списке.

Перед тем как передать управление следующему объекту, для текущего элемента управления в Visual FoxPro выполняется событие Valid. Если это событие возвращает значение .T., то данный элемент управления деактивизируется. Если .F., то элемент управления остается активным. Таким образом, событие Valid можно использовать для проверки допустимости значения, выбранного для данного элемента управления.

В связи с тем, что основным объектом пользовательского интерфейса является форма, уделим теперь внимание характерным для этого объекта событиям.

Событие Activate происходит, когда пользователь активизирует ранее не активную форму (щелкает мышкой на форме или входящем в нее элементе управления) или когда вызывается метод Show.

Событие Deactivate происходит, когда форма перестает быть активна, то есть управление передается другому объекту в том же приложении.

Следует учитывать, что ни событие Activate, ни Deactivate не происходят при передаче управления в другое приложение. Событие Deactivate также не происходит при стирании формы из памяти .

При создании формы (ее загрузки в память) перед событиями Activate и SetFocus происходит событие Load.

При стирании формы из памяти происходит событие UnLoad.

Событие Paint происходит, когда форма перерисовывается. Форма перерисовывается после перемещения или увеличения, а также, если было сдвинуто окно, ранее его закрывающее.

Использование события Paint для некоторых задач может вызывать каскад последующих событий. Если у вас нет веских причин, избегайте использовать событие Paint в следующих случаях:

• Перемещение или изменение размеров формы или элементов управления.

• Изменение любых переменных, которые воздействуют на размер или вид, типа установки свойства BackColor.

• Вызов метода Refresh.

При программировании реакции пользовательского приложения на происходящие события очень важно знать последовательность их возникновения. Рассмотрим эти последовательности для основных объектов Visual FoxPro. В Visual Basic, как вы, наверное, уже заметили, событий, на которые может реагировать приложение, значительно меньше и поэтому последовательность их возникновения для отдельного объекта не имеет такого значения.

Для набора форм и входящих в него отдельных форм (пусть для примера в набор входят две формы) будет выполняться следующая последовательность событий при его запуске:



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [ 44 ] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146