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

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


Tabarip TraeView DBList PictineClip MSComm

CommonDiatog Tod Bar

ImageList-- DBCmbo-

тшвш

SHQH ШШШШ

швшт щшшт

- SSTab

\--StatusRar

LlStVlOW

Outline

Cafendar--

SpinButton

MAPI Session

Grid

RichTaxtBox Progre&sBar

- Slider Control

MAPI Messages

- MaskEditBox

Рис. 5.8. Визуальные объекты и элементы управления в Visual Basic с подключенными

компонентами ActiveX

Элементы управления OLE самого различного назначения в виде файлов OCX можно создать с помощью Control Development Kit в Microsoft Visual C++ или с помощью программного обеспечения других фирм. В этом случае вам придется вручную зарегистрировать те OLE-объекты, которые вы захотите использовать, с помощью программы REGSVR32.EXE. Эта программа находится в директории SAMPLES\OLE Visual FoxPro. При запуске программы REGSVR32 имя файла OCX надо указать в качестве параметра.

5.3. Управление событиями

Все многообразие свойств, которые имеют объекты, не выглядело бы столь привлекательным, если бы программист не мог присваивать их или менять в зависимости от условий работы пользовательского приложения. Расширить возможности управления объектами за рамки определений, устанавливаемых при их создании, и призваны события, генерируемые для объектов приложения.

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

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

При возникновении события приложение выполняет определенные для этого события действия. Например, если в форме пользователь щелкает мышкой на каком-либо объекте, то объект активизируется. Программист всегда может либо переопределить эти действия, либо дополнить их, написав соответствующий код в процедуре для данного события.

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

Объекты-контейнеры не выполняют код для событий, если действия для этих событий предусмотрены во включенном в него объекте.

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

Если рассматривать события с точки зрения управления каким-либо объектом, то надо говорить о последовательности событий, которые происходят с момента его создания до уничтожения. Последовательность возникновения событий жестко определена. Разговор о событиях начнем с трех событий, которые распространяются на наибольшее число объектов.

PROCEDURE Object.Init

[LPARAMETERS Paraml, ParamI,...]



Это первое событие в последовательности событий при создании объекта. Обычно событие 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



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

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