
- •Свойства, методы и события
- •Visual Basic относится к системам визуального программирования, называемыми также системами rad (быстрая разработка приложений). Разработка приложения включает в себя два взаимосвязанных этапа:
- •Основные свойства элементов управления
- •Использование элементов управления
- •Использование переключателей и флажков
- •Использование списков
- •Простой текстовый редактор
Основные свойства элементов управления
Имя |
Для обращения к объекту в приложении предназначено свойство Имя (Name). |
Надпись |
Свойство Caption определяет текст надписи на объекте. |
Позиция |
Позицию элемента управления определяют четыре свойства: Left, Top, Height и Width. Эти значения по умолчанию используют в качестве единицы измерения твип (twip). Твип — это экранно-независимая единица измерения, равная 1/20 точки принтера и гарантирующая независимость отображения элементов приложения от разрешения дисплея. Отсчет в системе координат ведется сверху вниз (Y) и слева направо (X). |
Цвет |
Управление цветовым оформлением элементов осуществляется с помощью свойств BackColor (цвет фона), FillColor и ForeColor, которым по умолчанию назначаются стандартные цвета Windows. |
Параметры шрифта |
Вид шрифта в элементах управления выбирается путем установки значений свойства Font. |
Доступность и видимость элемента управления |
Часто при работе приложения требуется сделать недоступными для пользователя некоторые элементы управления. Для этого используют два свойства — Enabled и Visible. |
Мы уже говорили, что свойства можно изменять либо с помощью Окна свойств, либо программным способом. Про Окно свойств, наверное, уже понятно, но где писать код? Как программно изменить свойства объекта, как вызвать его методы? Пришло время познакомиться с событиями.
Ориентирование на события — это стержень создания Windows приложений в Visual Basic. При этом разработка выполняется не только в Windows, но и как Windows. Microsoft Windows — это система, базирующаяся на сообщениях и событиях. Это значит, что каждое действие в Windows вызывает событие, которое в виде сообщения передается в приложение. Приложение анализирует сообщение и выполняет соответствующие действия. Ни одно приложение не может функционировать само по себе, не взаимодействуя с другими приложениями и с операционной системой. Вышестоящая инстанция должна ему сообщить, что происходит, и только тогда приложение реагирует на это.
Допустим, что в Windows выполняются два приложения. Ни одно из них не может просто перехватить инициативу и среагировать на нажатие клавиш, так как это событие может быть предназначено другому приложению. Поэтому Windows сначала воспринимает событие, вызванное нажатием клавиш, а затем решает, кому передать обработку этого события. Затем нажатие клавиши в виде сообщения посылается приложению. Приложение обрабатывает событие, связанное с клавиатурой, и анализирует клавиатурный ввод, отображая его, например, в активном элементе управления.
Разумеется, такое представление является слишком упрощенным. Обычно при обработке нажатия клавиш вызывается значительно больше сообщений и событий. Приложения, созданные с помощью Visual Basic, также работают по этому принципу. Но при этом система Visual Basic берет на себя часть работы. Она перехватывает сообщение и передает его соответствующему объекту (например, кнопке), где затем вызывает соответствующее событие (например, событие click).
Главный вывод: для выполнения программного кода всегда необходимо событие. Это одно из важнейших правил создания приложений в Visual Basic. Ни один код не выполняется без события.
В программах, управляемых событиями (в отличии от основанных на линейном принципе построения программ, например, на QBasic), нет сплошного кода, который выполняется от начала до конца. Это значит, что после запуска программы у пользователя больше нет четко определенного пути. Он может в любое время нажать какую3нибудь кнопку в приложении, может выполнить ввод текста в поле, может в любое время прекратить обработку и вызвать другую программу. Windows и Visual Basic предоставляют ряд различных событий. Приложению следует подождать, пока одно из этих событий не наступит, и только потом выполнять код.
Рассмотрим несколько событий, которые могут обрабатываться большинством элементов управления.
События щелчка мыши |
|
Событие Click |
Событие Click вызывается, как только пользователь выполнит щелчок на элементе управления. |
Событие DblCHck |
Событие DblClick вызывается двойным щелчком кнопкой мыши на элементе управления. |
События, связанные с мышью |
|
Событие MouseDown |
Событие MouseDown вызывается при нажатии кнопки мыши. При этом процедуре обработки события передается несколько параметров: Button As Integer, Shift As Integer, X As Single, Y As Single. Передаваемые параметры определяют состояние кнопок мыши (Button)(Нажата кнопка мыши: 1=левая, 2=правая, 4=средняя), управляющих клавиш (Shift)(Нажата клавиша: 0=ничего, 1=[Shift], 2=[Ctrl], 4=[Alt]) и позицию курсора (X и Y). Параметры X и Y определяют позицию курсора мыши на экране относительно верхней левой точки элемента управления. |
Событие MovseUp |
Событие Mouseup вызывается при отпускании кнопки мыши. |
Событие MouseMove |
Это событие вызывается, когда пользователь передвигает курсор мыши. |
События клавиатуры |
|
Событие KeyPress |
Событие Keypress возвращает код ASCII нажатой клавиши. При этом не перехватываются специальные клавиши. |
События KeyDown, Key Up |
Эти события вызываются при нажатии (KeyDown) или отпускании (KeyUp) клавиши. Они происходят даже при нажатии специальных клавиш управления, например функциональных клавиш. При этом передаются два параметра: KeyCode и Shift. Параметр KeyCode содержит клавиатурный код (а не ASCII) нажатой клавиши, а параметр Shift информирует о состоянии клавиш [Shin], [Ctrl] и [Alt]. После нажатия клавиши события наступают в такой последовательности: KeyDown, KeyPress И KeyUp. |
Теперь попробуем изменить надпись (свойство Caption) на форме программным способом. Пусть это происходит при событии FormLoad (загрузка формы), которое активируются при загрузке формы.
Для этого
вызовем окно кода - Вид →
Код (или кнопкой на окне объектов
).
Введем
код в процедуру обработки события
FormLoad:
Private Sub Form_Load() frmMyForm.Caption = "Заголовок формы" End Sub
Готово!
Запускаем.
Теперь сделаем, чтобы форма при загрузке располагалась по центру экрана.
Сначала
с помощью окна расположения формы
установим положение формы, например, в
верхнем левом углу.
Теперь добавим код, который позволит автоматически выравнять положение формы при ее загрузке по центру экрана. Для этого воспользуемся объектом Screen (Экран). Метод Move (Движение) служит для перемещения объектов.
Private Sub Form_Load() frmMyForm.Caption = "Заголовок формы" frmMyForm.Move (Screen.Width - frmMyForm.Width) / 2, (Screen.Height - frmMyForm.Height) / 2 End Sub
Готово! При запуске форма располагается точно по центру экрана.
Наверное,
вы заметили, что при вводе кода Visual Bacis
отражает подсказки по синтаксису и
предлагает продолжение фразы. Выберите
свойство или метод который хотели ввести
и нажмите [Tab].
К тому же, Visual Basic применяет специальную технологию для перевода кода — и поэтому сразу же после нажатия клавиши [Enter] может проверить правильность написания кода. Если код некорректен, то Visual Basic выдает сообщение об ошибке.
Начиная с Visual Basic 4.0, появилась возможность разделять логическую строку, а значит и оператор, на несколько физических строк. Разделителем строк служит пробел, следующий за символом подчеркивания (_). Это дает возможность форматировать длинные, трудно обозримые строки так, чтобы они полностью помещались на странице экрана.
Работаем дальше. Пусть при щелчке по форме на форме появляется соответствующая надпись. Код очень прост:
Private Sub Form_Click() Form.Print "Щелчок по форме" End Sub Private Sub Form_Load() frmMyForm.Caption = "Заголовок формы" frmMyForm.Move (Screen.Width - frmMyForm.Width) / 2, (Screen.Height - frmMyForm.Height) / 2 End Sub
Готово.
С помощью окна свойств измените шрифт текста и запустите программу.
Давайте добавим еще обработку нажатия клавиш.
Private Sub Form_KeyPress(KeyAscii As Integer) frmMyForm.Print Chr$(KeyAscii); 'Chr$ - преобразуте код в символ End Sub
Готово! Вот результат работы:
Учимся программировать! Конспекты школьника.
Изучаем события, связанные с активностью мыши
Давайте попробуем разобраться, как происходит рисование с помощью мыши в графических редакторах.
Запускайте Visual Basic, создайте стандартный проект. Установите свойства формы: Имя (Name) - frmPaint, Caption - "Рисование на форме".
Обычно рисование происходит при движении мыши, т.е. нашему приложению необходимо обрабатывать событие MouseMove, которое сообщает, что мышь перемещается по окну приложения. Добавим следующий код:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) frmPaint.PSet (X, Y) End Sub
Запустим приложение. При движении мыши по форме остается след из точек.
Но след должен оставаться, только если при движении мыши нажата левая кнопка мыши. Добавим это условие в код приложения.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then frmPaint.PSet (X, Y) End Sub
Если запустить только что созданную программу, то можно обнаружить небольшую проблему. Проблема состоит в том, что для того, чтобы нарисовать сплошную линию, нам необходимо двигать курсор мыши очень медленно. Как с этой проблемой справляются другие графические приложения? Очень просто. Они соединяют линией две соседние точки положения мыши. Это может показаться странным, но именно так работают графические редакторы.
Во время движения мыши по экрану компьютер проверяет положение мыши через небольшие промежутки времени. Поскольку компьютер не имеет возможности отследить все положения мыши, то необходимо делать некоторые предположения о ее местонахождении. Это предположение выражается в том, что компьютер предполагает, что мышь двигалась по прямой между теми двумя точками, положение компьютеру известно. Когда вы рисуете на компьютере с помощью мыши, компьютер ведет себя именно так.
Повторим этот метод в нашем приложении.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then frmPaint.Line -(X, Y) End Sub
Почти хорошо. Однако появилась неприятная особенность. Каждый раз, когда мы нажимаем кнопку мыши для того, чтобы начать рисовать новый фрагмент, приложение соединяет линией точку окончания предыдущего фрагмента с началом нового. Для этого нам понадобится знать начальное положение курсора мыши, при нажатии кнопки. Объявим две глобальные переменные в секции (General)(Declarations).
Dim intPrevX As Integer Dim intPrevY As Integer
Теперь перепишем процедуру обработки события MouseMove и добавим обработку события MouseDown.
Dim intPrevX As Integer Dim intPrevY As Integer Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then intPrevX = X intPrevY = Y End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then frmPaint.Line (intPrevX, intPrevY)-(X, Y) intPrevX = X intPrevY = Y End Sub
Готово! Запускаем приложение и радуемся результату.
Радуемся, радуемся, но если приложение свернуть и обратно развернуть (или на время закрыть другим окном) изображение исчезнет. Избавиться от этой неприятности просто: установите свойство формы AutoRedraw равным true и окно будет перерисовываться автоматически.
Теперь, на закуску, создадим цветной рисунок.
По умолчанию будем использовать черный цвет. Другие цвета можно будет включит нажав на определенную клавишу на клавиатуре, вернутся к черному цвету нажав на любую другую клавишу.
Текущий цвет будем хранить в переменной Color типа Long (Длинное целое число от 32147483648 до +2147483647). Значение переменной можно задать различными способами:
присвоив какое-то числовое значение (Color = 12345; Color = &H80000018);
с помощью констант (Color = vbBlack);
с помощью функции QBColor() (Color = QBColor(3));
С помощью функции RGB() (Color = RGB(255,255,255)).
Дополним уже имеющийся код:
Dim intPrevX As Integer Dim intPrevY As Integer Dim Color As Long Private Sub Form_KeyPress(KeyAscii As Integer) Select Case Chr$(KeyAscii) Case "1" Color = RGB(255, 0, 0) Case "2" Color = RGB(0, 255, 0) Case "3" Color = RGB(0, 0, 255) Case Else Color = RGB(0, 0, 0) End Select lColor = RGB(0, 0, 0) End Sub Private Sub Form_Load() Color = RGB(0, 0, 0) End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then intPrevX = X intPrevY = Y End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Print lColor If Button = 1 Then frmPaint.Line (intPrevX, intPrevY)-(X, Y), Color intPrevX = X intPrevY = Y End Sub
Одним из наиболее используемых событий формы является Load. Это событие происходит при загрузке формы в память. Поэтому Load лучше всего подходит для инициализации объектов и переменных, принадлежащих форме.
Готово!
Учимся программировать! Конспекты школьника.