Программирование >>  Разработка пользовательского интерфейса 

1 ... 43 44 45 [ 46 ] 47 48 49 ... 147


Параметр 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, как вы, наверное, уже заметили, событий, на которые может реагировать приложение, значительно меньше и поэтому последовательность их возникновения для отдельного объекта не имеет такого значения.

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



FormSet.DataEnvironment.BeforeOpenTables (если свойство AutoOpenTables = .T.)

FormSet.Load

FormSet.Form1.Load

FormSet.Form2.Load

FormSet.DataEnvironment.<<Объекты Data Environment>>.Init FormSet.DataEnvironment.Init FormSet.Form1.<<Объекты в Form1>>.Init FormSet.Form1.Init

FormSet.Form2.<<Объекты в Form2>>.Init

FormSet.Form2.Init

FormSet.Init

FormSet.Activate

FormSet.Form2.Activate

FormSet.Form2.Deactivate

FormSet.Activate

FormSet.Form1.Activate

FormSet.Form1.<<Первый элемент управления>>.When FormSet.Form1.GotFocus

FormSet.Form1. <<Первый элемент управления>>.GotFocus

При завершении работы с набором форм выполняется следующая последовательность событий:

FormSet.Activate FormSet.Form2.Destroy

FormSet.Form2.<<Объекты в Form2>>.Destroy

FormSet.Form2.Unload

FormSet.Form1.Destroy

FormSet.Form1.<<Объекты в Form1>>.Destroy

FormSet.Form1.Unload

FormSet.Unload

FormSet.DataEnvironment.AfterCloseTables FormSet.DataEnvironment.Destroy

FormSet.DataEnvironment.<<Объекты Data Environment>>.Destroy

При активизации объекта Grid пользователем происходит следующая последовательность событий:

Form.Grid.When Form.GotFocus

Form.Grid.AfterRowColChange

Последнее событие AfterRowColChange возвращает номер колонки, в которой находится курсор, то есть которая является активной. Это событие сопровождает и каждое перемещение пользователя по клеткам Grid, и таким образом, любой переход курсора в другую клетку сопровождается двумя событиями:

Form.Grid.BeforeRowColChange Form.Grid.AfterRowColChange

Событие BeforeRowColChange возвращает номер колонки, в которой находился курсор до перехода в новую клетку.

Если пользователь пометил запись для удаления или в программе выполнилась команда DELETE, для объекта Grid генерируется событие Deleted, которое возвращает номер помеченной для удаления записи.

При прокрутке данных с помощью линейки прокрутки каждое нажатие на кнопку прокрутки или перемещение движка вызывает выполнение события Scrolled, которое возвращает следующий код для идентификации действий пользователя:

0 - нажата кнопка прокрутки вверх.

1 - нажата кнопка прокрутки вниз.

2 - пользователь щелкнул мышкой на вертикальной линейке прокрутки сверху от движка.

3 - пользователь щелкнул мышкой на вертикальной линейке прокрутки снизу от движка.



4 - нажата кнопка прокрутки влево.

5 - нажата кнопка прокрутки вправо.

6 - пользователь щелкнул мышкой на горизонтальной линейке прокрутки слева от движка.

7 - пользователь щелкнул мышкой на горизонтальной линейке прокрутки справа от движка.

При переходе к другому элементу управления из Grid происходит следующая последовательность событий:

Form.Grid.Valid

Form.<<Выбранный элемент управления>>.When Form.Grid.BeforeRowColChange

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

Form1.Combo1.When Form1.GotFocus Form1.Combo1.GotFocus Form1.Combo1.MouseDown,1,0,108,48

Form1.Combo1.DropDown && Нажатие на раскрывающую стрелку Form1.Combo1.MouseUp,1,0,108,48 Form1.Combo1.MouseDown,1,0,88,117 Form1.Combo1.MouseUp,1,0,88,117

Form1.Combo1.DownClick && Нажатие на кнопку прокрутки вниз

Form1.Combo1.MouseDown,1,0,92,11

Form1.Combo1.MouseUp,1,0,92,11

Form1.Combo1.UpClick <>&& Нажатие на кнопку прокрутки вверх

Form1.Combo1.MouseDown,1,0,79,11

Form1.Combo1.MouseUp,1,0,29,27

Form1.Combo1.InteractiveChange && Изменение значения в списке

Form1.Combo1.Click

Form1.Combo1.Valid

Form1.Combo1.When

Form1.Combo1.Valid

Form1.<<Следующий элемент управления>>.When Form1.Combo1.LostFocus

Для текстового поля при вводе в него данных с помощью возникающих событий мы можем отследить ввод каждого символа. Поэтому рассмотрим последовательность событий для этого элемента управления. Если текстовое поле Text1 будет размещено в форме Form1, и в текстовое поле мы перейдем с помощью мыши, и будем вводить три символа Rus, а затем нажмем клавишу Enter, то для этого текстового поля произойдет следующая последовательность событий:

Form1.Text1.When && Проверка доступности

Form1.Text1.Gotfocus Form1.Text1.MouseDown, 1, 0, 25, 76 Form1.Text1.MouseUp, 1, 0, 25, 76 Form1.Text1.Click

Form1.Text1.KeyPress, 82,1 && Нажимаем клавишу R Form1.Text1.InteractiveChange

Form1.Text1.KeyPress, 117,0 && Нажимаем клавишу u Form1.Text1.InteractiveChange

Form1.Text1.KeyPress, 115,0 && Нажимаем клавишу s Form1.Text1.InteractiveChange

Form1.Text1.KeyPress, 13,0 && Нажимаем клавишу Enter

Form1.Text1.Valid

Form1.Text1.LostFocus

5.4. Использование методов



1 ... 43 44 45 [ 46 ] 47 48 49 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика