Электронная библиотека » Евгений Матвеев » » онлайн чтение - страница 7


  • Текст добавлен: 16 октября 2020, 08:02


Автор книги: Евгений Матвеев


Жанр: Прочая образовательная литература, Наука и Образование


Возрастные ограничения: +12

сообщить о неприемлемом содержимом

Текущая страница: 7 (всего у книги 18 страниц)

Шрифт:
- 100% +
8.2.4. Пример программирования

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

В качестве примера на основе формы создадим простейший графический редактор, обладающий следующими возможностями:

• рисование точки щелчком левой кнопки мыши,

• рисование кривых линий путем нажатия кнопки, произвольного перемещения указателя и последующего отпускания кнопки мыши,

• рисование прямых линий, которое производится аналогично рисованию кривых, но при одновременном удержании клавиши [Ctrl],

• очистка окна от изображений двойным щелчком мыши,

• распечатка рисунка на текущем принтере правым щелчком мыши,

• выдача предупреждения при попытке закрытия приложения.

Самое поразительное заключается в том, что все эти функции реализуются буквально несколькими строками кода!

Сначала давайте создадим новый проект, для чего в главном меню Visual Basic выберите команду File – New Project (Файл – Новый проект). На экране появится диалог New Project (Новый проект) (Рис.8.4).


Рис.8.4. Диалог New Project (Новый проект)


Здесь щелчком мыши выберите значок Standard EXE (Стандартное приложение) и нажмите кнопку OK для создания нового проекта. На экране появится пустая форма Form1 (Рис.8.5).


Рис.8.5. Новая форма Form1


Справа от формы найдите окно свойств (Properties Window), имеющее заголовок Properties – Form1 (Свойства – Form1) (Рис.8.6).


Рис.8.6. Окно свойств (Properties Window)


В списке найдите свойство DrawMode (Режим рисования), определяющее способ формирования цвета графических изображений при выводе на экран. У данного свойства установите значение 10 – Not Xor Pen, которое позволяет стирать линию при повторном ее рисовании. Все остальные свойства формы можно оставить установленными по умолчанию.

Щелкните правой кнопкой мыши на поверхности формы. Появится контекстное меню, с помощью которого можно выполнить все допустимые действия над данным объектом (Рис.8.7).


Рис.8.7. Контекстное меню формы


Выберите пункт меню View Code (Просмотр кода) для открытия окна кода формы в разделе General Declarations (Общие объявления) (Рис.8.8).


Рис.8.8. Окно кода формы в разделе

General Declarations (Общие объявления)


Введите строку, объявляющую переменные X1, Y1, X2 и Y2 уровня модуля, которые будут использоваться нами в дальнейшем для хранения координат начала и конца отрезка:


Dim X1, Y1, X2, Y2


После этого, в левом открывающемся списке выберите объект Form (Форма), а в правом – событие MouseDown (Кнопка вниз), возникающее при нажатии на любую кнопку мыши. Visual Basic создаст пустую процедуру обработки данного события:


Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)


End Sub


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

• Button – указывает кнопку мыши, которая была нажата,

• Shift – определяет, нажата ли в данный момент одна из клавиш-модификаторов ([Alt], [Ctrl] или [Shift]),

• X и Y – являются текущими координатами указателя мыши.

В теле процедуры обработки события MouseDown (Кнопка вниз) введите следующий код:


Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then ‘ проверка нажатия кнопки

X1 = X ‘ инициализация переменных

Y1 = Y

X2 = X

Y2 = Y

CurrentX = X ‘ инициализация свойств формы

CurrentY = Y

PSet (X, Y) ‘ рисование точки

End If

End Sub


Этот код должен выполняться только при нажатии левой кнопки мыши, поэтому, прежде всего, с помощью блока If…Then осуществляется проверка параметра Button на равенство встроенной константе vbLeftButton, которая соответствует левой кнопке мыши.



Далее идет инициализация переменных X1, Y1, X2 и Y2, куда заносятся текущие координаты начала и конца отрезка. Аналогично устанавливаются свойства формы CurrentX (Текущая координата X) и CurrentY (Текущая координата Y). И, наконец, используется метод Pset (Вывести точку), рисующий точку на поверхности формы. Что же касается рисования линий и отрезков то, процедура Form_MouseDown служит подготовительным этапом, устанавливая координаты их начальной точки.

Теперь откройте процедуру обработки события MouseMove (Перемещение указателя) и введите следующий код:


Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then ‘ проверка нажатия кнопки

If Shift = vbCtrlMask Then ‘ проверка нажатия клавиши [Ctrl]

Line (X1, Y1) – (X2, Y2) ‘ стирание предыдущего отрезка

X2 = X ‘ сохранение координат нового отрезка

Y2 = Y

Line (X1, Y1) – (X2, Y2) ‘ рисование нового отрезка

Else

Line (CurrentX, CurrentY) – (X, Y) ‘ рисование кривой линии

End If

End If

End Sub


В этой процедуре, также, используется блок If…Then для проверки нажатия левой кнопки мыши. Затем во вложенной условной инструкции If…Then… Else сравнивается параметр Shift и встроенная константа vbCtrlMask, соответствующая клавише [Ctrl]. По результатам сравнения производится ветвление программы: после ключевого слова Then выполняется рисование прямого отрезка, а после Else – кривой линии.

Вы можете удивиться, как же с помощью метода Line (Линия), рассчитанного на построение прямых отрезков, возможно рисование кривой линии? Очень просто, ведь в нашем случае кривая состоит из коротких отрезков. При первом вызове процедуры Form_MouseMove рисуется отрезок от начальной точки кривой до текущих координат указателя мыши X и Y. Как только это происходит, Visual Basic автоматически присваивает свойствам формы CurrentX (Текущая координата X) и CurrentY (Текущая координата Y) значения конца отрезка. При каждом последующем вызове процедуры продолжается процесс построения отрезков друг за другом, вместе составляющих кривую линию.

Технология рисования прямых отрезков существенно отличается от кривой линии. При каждом вызове процедуры Form_MouseMove сначала методом Line (Линия) формируется отрезок, ложащийся точно поверх нарисованного в предыдущем вызове, чем достигается стирание отрезка. Напоминаем, что это стало возможным благодаря установке значения 10 – Not Xor Pen у свойства DrawMode (Режим рисования) формы, а также сохранения координат начала и конца отрезка в переменных X1, Y1, X2 и Y2. Затем текущие координаты указателя мыши присваиваются переменным X2 и Y2, после чего повторно используется метод Line (Линия) для рисования нового отрезка. Таким образом, визуально конец отрезка непрерывно перемещается за указателем мыши, пока не отпущена левая кнопка.

Прямые отрезки можно было бы рисовать и по-другому, в процедуре обработки события MouseUp (Кнопка вверх), но тогда пользователю было бы трудно проследить, как окончательно расположится отрезок. Мы используем процедуру Form_MouseUp для другой цели – печати формы на принтере:


Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then ‘ проверка отпускания кнопки

If MsgBox («Распечатать рисунок?», vbYesNo) = vbYes Then

PrintForm ‘ печать формы на принтере

End If

End If

End Sub


Условная инструкция If…Then, прежде всего, проверяет отпускание пользователем правой кнопки мыши. Если данное событие произошло то, выполняется вложенный блок If…Then, использующий встроенную функцию MsgBox (Окно сообщения) для уточнения у пользователя необходимости выполнения распечатки. Первый аргумент функции содержит текстовую строку с вопросом «Распечатать рисунок?», а второй аргумент – встроенную константу vbYesNo, которая определяет наличие кнопок Yes (Да) и No (Нет) в окне сообщения.

Возвращаемое значение функции сравнивается с константой vbYes. В случае нажатия пользователем кнопки Yes (Да) сравнение выдаст результат True (Истина) и будет выполнена часть условной инструкции после ключевого слова Then. В нашем случае вызывается метод PrintForm (Распечатать форму), который распечатывает на принтере все видимые изображения, находящиеся на поверхности формы.

Очистка поверхности формы от всех нарисованных изображений производится в процедуре обработки еще одного события мыши – DblClick (Двойной щелчок) – с помощью метода Cls (Очистить экран). Процедура Form_DblClick отличается предельной простотой:


Private Sub Form_DblClick ()

Cls ‘ очистка поверхности формы от изображений

End Sub


И, наконец, осталось добавить запрос о необходимости завершения работы приложения, когда пользователь пытается закрыть окно во время работы. Для этого воспользуемся процедурой обработки события Unload (Выгрузка), которое возникает перед выгрузкой формы из памяти компьютера:


Private Sub Form_Unload (Cancel As Integer)

If MsgBox («Завершить работу?», vbYesNo) = vbYes Then

Cancel = False ‘ форму не выгружаем

Else

Cancel = True ‘ форму выгружаем

End If

End Sub


У процедуры Form_Unload есть параметр Cancel (Отмена) в виде переменной, которая по умолчанию имеет значение True (Истина). Если параметру Cancel (Отмена) присвоить значение False (Ложь), то после выхода из процедуры Form_Unload приложение возобновит свою работу.

Запустите созданный графический редактор, нажмите кнопку Start (Запуск) на панели инструментов или клавишу [F5].

Поэкспериментируйте с созданным графическим редактором, рисуя точки, кривые линии и отрезки (Рис.8.9).


Рис.8.9. Графический редактор


После этого щелкните мышью на значке в правой части заголовка окна. Окно графического редактора сразу не закроется, а сначала появится запрос о завершении работы приложения. Нажмите кнопку Да (Yes) для завершения работы.

Глава 9. Основные элементы управления

В этой главе вы научитесь:

• использовать в своих программах формы и основные элементы управления,

• применять их свойства, методы и события.

9.1. Обзор основных элементов управления

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

В левой части окна Visual Basic находится панель элементов управления (Tool Box), на вкладке General (Основная) которой расположены кнопки, соответствующие основным элементам управления (Рис.9.1).


Рис.9.1. Вкладка General (Основная)

панели элементов управления (Tool Box)


Функции, выполняемые этими элементами управления, весьма разнообразны (Рис.9.2).


Рис. 9.1. Кнопки вкладки General (Основная)

панели элементов управления (Tool Box)


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

Теперь перейдем к более подробному рассмотрению основных элементов управления. Описание их будет приводиться не в том порядке, как они располагаются на вкладке General (Основная) панели элементов управления, а сгруппировано по выполняемым функциям.

9.2. Label (Надпись)

Элемент управления Label (Надпись) отображает на экране компьютера текст, который пользователь программы не может изменить с помощью клавиатуры. Надписи чаще всего используются для пояснения функций других объектов приложения (Рис.9.3).


Рис.7.6. Символы объявления типов данных

констант и переменных языка Visual Basic

9.2.1. Свойства

Одним из главных свойств надписи является Caption (Заголовок), которое содержит видимый на экране текст. Данное свойство можно изменять как в процессе проектирования, так и при выполнении приложения. Однако, делается это только программным путем, пользователь не имеет возможности напрямую редактировать свойство Caption (Заголовок). Другие, часто используемые свойства надписи:

Alignment (Выравнивание). Устанавливает тип выравнивания текста внутри надписи:

• 0 – Left Justify (Выравнивание по левому краю),

• 1 – Right Justify (Выравнивание по правому краю),

• 2 – Center (Выравнивание по центру).

AutoSize (Автоподстройка размера). Определяет, будет ли горизонтальный размер надписи автоматически подгоняться под размер текста:

• True (Истина) – автоподстройка размера включена,

• False (Ложь) – автоподстройка размера выключена.

BackStyle (Тип фона). Предоставляет возможность выбора типа фона:

• 0 – Transparent (Прозрачный),

• 1 – Opaque (Непрозрачный).

BorderStyle (Тип границы). Устанавливает тип границы надписи:

• 0 – None (Нет),

• 1 – Fixed Single (Сплошная).

Container (Контейнер). Содержит ссылку на объект, являющийся контейнером для данного элемента управления. Доступно только во время выполнения.

DragIcon (Значок перетаскивания). Позволяет выбрать файл со значком указателя мыши, который будет отображаться при перетаскивании объекта с помощью мыши над поверхностью надписи.

DragMode (Режим перетаскивания). Устанавливает возможность переключения надписи в режим перетаскивания:

• 0 – Manual (Ручной) – с использованием метода Drag (Перетащить),

• 1 – Automatic (Автоматический) – при перетаскивании надписи с помощью мыши.

Enabled (Доступность). Указывает на доступность событий, связанных с мышью и клавиатурой:

True (Истина) – события вызываются,

False (Ложь) – события не вызываются (при этом надпись блекнет).

Index (Индекс). Определяет порядковый номер элемента в массиве объектов. Используется только в том случае, если данная надпись является элементом объектного массива.

TabIndex (Индекс табуляции). Хранимое число определяет количество нажатий клавиши [Tab] до получения фокуса ввода данным элементом управления. Значение этого свойства должно быть уникальным в пределах текущей формы.

ToolTipText (Текст всплывающей подсказки). Содержит текст всплывающей подсказки, которая появляется при остановке указателя мыши над данным элементом управления.

UseMnemonic (Использование мнемонических обозначений). Разрешает или запрещает использование мнемонических обозначений клавиш доступа («горячих» клавиш), которые выделяются подчеркнутым шрифтом в тексте надписи. Для этого перед нужной буквой ставится символ амперсанта "&», который на экран не выводится. Так как надпись не может получать фокус ввода, он передается следующему элементу управления. Допустимые значения свойства:

• True (Истина) – мнемонические обозначения разрешены,

• False (Ложь) – мнемонические обозначения запрещены.

WhatsThisHelpID (Идентификатор справки Что это?). Указывает номер раздела всплывающей подсказки, вызываемой с помощью кнопки Что это? (What is This?) в правой части заголовка окна формы.

WordWrap (Перенос слов). Определяет автоматическое изменение вертикальных размеров надписи с возможностью переноса слов, если текст не помещается в одной строке:

• True (Истина) – осуществляется перенос слов,

• False (Ложь) – перенос слов не производится.

Некоторые свойства управляют отображением одного из связанных полей базы данных: DataField (Поле данных), DataFormat (Формат данных), DataMember (Элемент данных) и DataSource (Источник данных). Они будут рассматриваться позже, при описании элемента управления Data (Данные).

Ряд других свойств уже упоминались в предыдущей главе при описании формы. Их использование в качестве свойств надписи существенно не отличается и поэтому здесь изучаться не будет: Appearance (Внешний вид), BackColor (Цвет фона), Font (Шрифт), ForeColor (Основной цвет), Height (Высота), Left (Левая координата), LinkMode (Режим связи), LinkTopic (Идентификатор связи), MouseIcon (Значок указателя мыши), MousePointer (Указатель мыши), OLEDropMode (Режим перетаскивания OLE), RightToLeft (Справа налево), Tag (Признак), Top (Верхняя координата), Visible (Видимость), Width (Ширина).

9.2.2. События

Кроме событий Click (Щелчок) и DblClick (Двойной щелчок), которые наиболее часто применяются программистами, надписи генерируют ряд других событий. Большинство из них уже рассмотрены ранее, при изучении формы, но одно из событий встречается впервые – Change (Изменение). Вызывается оно при изменении программным путем значения свойства Caption (Заголовок) и обычно используется для форматирования текста надписи.

9.2.3. Методы

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

Drag (Перетащить). Начинает, заканчивает или отменяет операцию перетаскивания объекта в ручном режиме:


объект. Drag [действие]


Параметр действие может иметь одно из трех возможных значений:

• 0 или vbCancel (Отменить),

• 1 или vbBeginDrag (Начать перетаскивание),

• 2 или vbEndDrag (Завершить перетаскивание).

LinkExecute (Выполнить команду связи). Посылает командную строку приложению-источнику данных DDE – Dynamic Data Exchange (Динамический обмен данными):


объект.LinkExecute командная_строка


LinkPoke (Возвратить по связи). Передает содержимое объекта приложению-источнику данных DDE.


объект.LinkPoke


LinkRequest (Запросить связь). Запрашивает приложение-источник данных DDE обновить содержимое объекта.


объект.LinkRequest


LinkSend (Отправить по связи). Передает содержимое объекта приложению-приемнику данных DDE.


объект.LinkSend


ShowWhatsThis (Показать Что это?). Показывает раздел справки, относящийся к данному элементу управления.


объект.ShowWhatsThis


Остальные методы надписи были описаны в предыдущей главе: Move (Переместить), OLEDrag (Перетащить OLE), Refresh (Обновить) и ZOrder (Z-порядок).

9.2.4. Пример программирования

Сначала поэкспериментируем со свойством Alignment (Выравнивание) элемента управления Label (Надпись), изменяя его в процедуре обработки события Click (Щелчок). Но сначала нарисуем надпись на пустой форме.

Щелкните мышью на кнопке элемента управления Label (Надпись) в ToolBox (Панель элементов) (Рис.9.2). При переводе указателя мыши на форму он примет вид крестика:.

Нажав и удерживая левую кнопку мыши, нарисуйте надпись, а затем отпустите кнопку мыши. На форме появится надпись Label1 (Рис.9.3).

Для написания процедуры обработки события Click (Щелчок) надписи Label1, дважды щелкните на ней мышью. Откроется окно кода с пустой процедурой Label1_ Click.

Введите текст процедуры, которая выполняет проверку текущего значения свойства Alignment (Выравнивание) и меняет тип выравнивания текста:


Private Sub Label1_Click ()

If Label1.Alignment = vbLeftJustify Then

Label1.Alignment = vbRightJustify

Else

Label1.Alignment = vbLeftJustify

End If

End Sub


Запустите программу, щелкнув мышью на кнопке Start (Запуск) панели инструментов или нажав клавишу [F5]. Visual Basic перейдет в режим выполнения.

Щелкните несколько раз мышью на надписи. Тип выравнивания текста будет поочередно меняться.

Завершив эксперимент, нажмите кнопку End (Закончить) для перехода в режим проектирования.

Теперь рассмотрим особенности применения технологии Drag and Drop (Перетащить и отпустить) на примере взаимодействия надписи, выступающей в качестве объекта-источника, и формы, как объекта-приемника.

Щелчком мыши выделите надпись Label1, после чего в Properties Window (Окно свойств) появится перечень ее свойств.

У свойства DragMode (Режим перетаскивания) установите значение 1 – Automatic (Автоматический).

С помощью соответствующего пункта контекстного меню формы откройте окно кода.

Перейдите к процедуре обработки события Form_DragDrop и введите единственную строку кода:


Private Sub Form_DragDrop (Source As Control, X As Single, Y As Single)

Source.Move X, Y

End Sub


Что же будет происходить при отпускании надписи, перетаскиваемой с помощью мыши? Visual Basic вызовет данную процедуру и передаст ей следующие параметры:

• Source – ссылку на объект-источник,

• X и Y – текущие координаты указателя мыши.

Затем к объекту-источнику будет применен метод Move (Переместить) с текущими координатами указателя мыши. Объект-источник переместится в заданное место формы.

9.3. TextBox (Текстовое поле)

Для ввода и редактирования текста служит элемент управления TextBox (Текстовое поле). Этот объект – основной инструмент ввода данных, используемый разными приложениями. Чаще всего, текстовое поле бывает небольшого размера и позволяет вводить не более одной строки символов (Рис.9.4).


Рис.9.4. Элемент управления TextBox (Текстовое поле)

без полос прокрутки


Однако, при установке соответствующих свойств данный элемент управления может иметь полосы прокрутки и служить для ввода большого текста, аналогично стандартной программе Блокнот (Notepad) (Рис.9.5).


Рис.9.5. Элемент управления TextBox (Текстовое поле)

с полосами прокрутки


TextBox (Текстовое поле) безо всякого дополнительного программирования позволяет использовать стандартные комбинации клавиш Windows для редактирования текста, например:

[Delete] – удалить символ справа от курсора,

[BackSpace] или [Ctrl] + [H] – удалить символ слева от курсора,

[Ctrl] + [Z] – отменить предыдущее действие,

[Ctrl] + [Insert] или [Ctrl] + [C] – скопировать выделенный фрагмент в буфер обмена,

[Shift] + [Delete] или [Ctrl] + [X] – вырезать выделенный фрагмент в буфер обмена,

[Shift] + [Insert] или [Ctrl] + [V] – вставить фрагмент текста из буфера обмена.

Щелкнув правой кнопкой мыши внутри текстового поля, можно вызвать контекстное меню для редактирования текста (Рис.9.6).


Рис.9.6. Контекстное меню для редактирования текста

элемента управления TextBox (Текстовое поле)


Страницы книги >> Предыдущая | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Следующая
  • 0 Оценок: 0

Правообладателям!

Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.


Популярные книги за неделю


Рекомендации