www.uroki.net - cценарии школьных праздников, поурочные тематические календарные планы разработки открытых уроков классных часов конспекты лекций по информатике математике физике химии биологии географии для директора и завуча для психолога для классного руководителя музыка песни караоке для проведения Выпускного вечера Последнего Первого звонка 1 сентября Нового года

Главная\Документы\Для учителя информатики

При использовании материалов этого сайта - АКТИВНАЯ ССЫЛКА и размещение баннера -ОБЯЗАТЕЛЬНО!!!

Объектно-ориентированное программирование VisualBasic

Использованы материалы : информационно-образовательного портала КЛЯКС@.net
www.klyaksa.net

Учимся программировать!
Конспекты школьника.
Составил: Башлаков А.С.
-Б@С-  ©2005г.

Содержание.

1.       Что такое ООП.

2.       Свойства, методы и события.

3.       Изучаем события, связанные с активностью мыши.

4.       Использование элементов управления.

5.       Использование переключателей и флажков.

6.       Использование списков.

7.       Простой текстовый редактор.

8.       Текстовый редактор с возможностью форматирования текста.

9.       продолжение следует

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

В качестве системы программирования можно использовать Microsoft VisualBasic 6 rus.

При использовании материалов ссылка на источник обязательна.

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Что такое ООП

Языки программирования претерпели большие изменения с тех пор, как в сороковых годах началось их использование.

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

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

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

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

Дальнейшее развитие структурного подхода привело к модульному программированию. Оно предусматривает представление прикладной задачи в виде иерархии взаимодействующих модулей или программ.

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

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

Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов. Первый объектно-ориентированный язык программирования был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. В 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования. Разработка новых объектно-ориентированных языков программирования продолжается.

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

Объекты объединяются в классы. К одному классу принадлежат объекты с одинаковым набором свойств, методов и событий.

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

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

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

  • инкапсуляция (Характеристики объекта и методы (процедуры и функции) для их обработки объединяются в описании класса объектов, причем предполагается что доступ к характеристикам объекта будет происходить через соответствующие методы, т.е. они защищены от внешнего вмешательства);
  • наследование (Один класс может быть получен от другого. В в таком случае говорят, что один класс является базовым, а другой - производным. Это позволяет повторно использовать уже созданный код в других проектах. Производный класс наследует всю структуру характеристик и поведение базового, однако может дополнять или модифицировать их.);
  • полиморфизм (Полиморфизм означает, что различные объекты используют одинаковую абстракцию, т.е. могут обладать свойствами и методами с одинаковыми именами. Однако обращение к ним будет вызывать различную реакцию для различных объектов. Большое достоинство полиморфизма состоит в том, что при использовании объекта можно вызывать определенное свойство или метод, не заботясь о том, как объект выполняет задачу. Это очень важно при модификации программного обеспечения. Изменения или новшества просто адаптируются к имеющимся компонентам приложения.).

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

Для того чтобы лучше понять суть вопроса вернемся к QBasic и рассмотрим несколько примеров.

Точка. Программа рисования и стирания точки.

REM точка 
'установка графического режима
SCREEN 1
'координаты точки
x = 10
y = 10
'цвет фона
cf = POINT(x, y)
'рисуем точку
PSET (x, y)
'стираем точку
PSET (x, y), cf
END

Снег 1. Программа рисования и стирания 100 точек.

REM снег 1
SCREEN 1
x1 = 10
y1 = 10
x2 = 10
y2 = 10
...       
'тут много строчек (примерно, 194 :) )
...
...
x100 = 10
y100 = 10
FOR i = 1 TO 100
    'как-то изменяем координаты точки (нам это сейчас не важно)
    ............................
   
cf1 = POINT(x1, y1)
    PSET (x1, y1)
    SLEEP 1             '
пауза 
    PSET (x1, y1), cf1
    ...        '
тут много строчек  (примерно, 388 :) )
    ...
    ...
    '
как-то изменяем координаты точки
    ...........................
    cf100 = POINT(x100, y100)
    PSET (x100, y100)
    SLEEP 1             '
пауза
    PSET (x100, y100), cf100
NEXT i
END

Не программа - а ужас. Попробуем ввести массивы.

Снег 2. Программа рисования и стирания 100 точек.

REM снег 2.1
SCREEN 1

DIM x(1 TO 100) AS INTEGER
DIM y(1 TO 100) AS INTEGER
DIM cf(1 TO 100) AS INTEGER

FOR i = 1 TO 100
    '
как-то изменяем координаты точки (нам это сейчас не важно)
    ........................
    cf1 = POINT(x(i), y(i))
    PSET(x(i), y(i))
    SLEEP 1             '
пауза 
    PSET (x(i), y(i)), cf(i)
NEXT i
END

REM снег 2.2
SCREEN 1
DIM p(1 TO 100, 1 TO 3) AS INTEGER
FOR i = 1 TO 100
    'как-то изменяем координаты точки (нам это сейчас не важно)
    ........................
   
cf1 = POINT(p(i,1), p(i,2))
    PSET(p(i,1), p(i,2))
    SLEEP 1             '
пауза 
    PSET (p(i,1), p(i,2)), p(i,3)
NEXT i
END

Так лучше, но все-таки довольно путано. Попробуем ввести комбинированные типы.

Точка. Программа рисования и стирания точки.

REM точка 2

TYPE point
    x AS INTEGER    'коодината x
    y AS INTEGER    'коодината y
    cf AS INTEGER    'цвет фона под точкой
END TYPE

DIM p AS point
POINT(p.x, p.y)
PSET(p.x, p.y)
SLEEP 1             'пауза 
PSET (p.x, p.y), p.cf
NEXT i
END

Снег 3. Программа рисования и стирания 100 точек.

REM снег 3

TYPE point
    x AS INTEGER
    y AS INTEGER
    cf AS INTEGER
END TYPE

DIM p(1 TO 100) AS point
FOR i = 1 TO 100
    '
как-то изменяем координаты точки (нам это сейчас не важно)
    ........................
    p(i).cf = POINT(p(i).x, p(i).y)
    PSET(p(i).x, p(i).y)
    SLEEP 1             '
пауза 
    PSET (p(i).x, p(i).y), p(i).cf
NEXT i
END

Так вот оно лучше. Теперь с первого взгляда на код понятно, что делает программа. Причем, обратите внимание: все свойства объекта (координаты точки, цвет фона под точкой) собраны вместе, а не разбросаны по нескольким одномерным массивам (или вообще ни как не связанным друг с другом переменным) и не прячутся за не понятными индексами двумерного массива (сравните: p(i).y  и  p(i,2)).

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

К сожалению, QBasic не поддерживает понятие класса, поэтому мы сами "расширим" его возможности :)

REM снег 4

КЛАСС point
    x AS INTEGER
    y AS INTEGER
    cf AS INTEGER

    SUB рисование
    cf = POINT(x, y)
    PSET(x, y)
    END SUB

    SUB стирание
    PSET (x, y), cf
    END SUB
END КЛАСС

DIM p(1 TO 100) AS point
FOR i = 1 TO 100
    'как-то изменяем координаты точки (нам это сейчас не важно)
    ........................
    p.рисование
    SLEEP 1             'пауза 
    p.стирание
NEXT i
END

Теперь давайте на основе класса точка (point) создадим новый класс - цветная точка (color_point). Класс color_point наследует от своего родителя все характеристики (координаты - x и y, цвет фона под точкой - cf) и процедуру стирания точки. Процедуру рисования точки придется модифицировать (рисовать будем цветную точку). Так же дополним класс новым свойством - цвет точки.

REM цветной снег

КЛАСС color_point ИЗ КЛАССА point
    c AS INTEGER
    
    SUB рисование
    cf = POINT(x, y)
    PSET(x, y),c
    END SUB

END КЛАСС

DIM p(1 TO 100) AS color_ point 
FOR i = 1 TO 100
    'как-то изменяем координаты и, возможно, цвет точки (нам это сейчас не важно)
    ........................
    p.рисование
    SLEEP 1             'пауза 
    p.стирание
NEXT i
END

Для дальнейшего изучения программирования мы будем использовать язык программирования Visual Basic. 

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

Слово Basic в названии указывает на то, что синтаксис программ и операторы опираются на язык высокого уровня Basic (Beginners Atlpurpose Symbolic Instruction Code - многоцелевой код символических команд для начинающих), но заметно от него отличается.

Создадим для примера простейшее приложение. Точнее создавать и программировать не придется вообще ничего: Visual Basic изначально предоставляет готовое приложение, состоящее из одного окна (формы) класса Form.

Запустим Visual Basic. После запуска Visual Basic на экране появляется диалоговое окно, в котором вы можете выбрать тип создаваемого приложения. Из этого же окна можно загрузить уже существующий проект.

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

Выберем тип проекта "Стандартный EXE".


Сразу после этого Visual Basic предложит новую "пустую" форму. Данная форма не является абсолютно пустой - она содержит основные элементы окна Windows: заголовок, управляющие кнопки, кнопку вызова системного меню.

Любое приложение Windows выполняется в соответствующем окне.  Visual Basic - это среда разработки приложений под Windows, поэтому для любого разрабатываемого приложения предлагается окно (форма).

Итак, первая программа готова. Чтобы увидеть результат ее работы, запустим программу.

Это приложение имеет минимум того, что нужно любому приложению, выполняемому в среде Windows, и не одним элементом больше. Оно представляет собой каркас или заготовку, обеспечивающее разработчика всем необходимым для каждого приложения вообще.

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

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Свойства, методы и события

Visual Basic относится к системам визуального программирования, называемыми также системами RAD (быстрая разработка приложений). Разработка приложения включает в себя два взаимосвязанных этапа:

  • создание пользовательского интерфейса приложения;
  • определение функциональности приложения.

Пользовательский интерфейс определяет внешний вид формы при выполнении приложения и то, каким образом пользователь управляет приложением.

Функциональность приложения определяется процедурами, которые выполняются при возникновении определенных событий.

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

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

Главное окно среды разработчика содержит несколько окон. Все окна подчиняются главному окну Visual Basic и могут "прикрепляться" (dockable) к одному из его краев.

Окно формы (конструктор форм) — главный элемент приложения.
Окно формы, часто называемое просто "форма", является главным элементом приложения. Форма представляет собой контейнер для элементов управления. Точки сетки на форме только помогают размещению элементов и при работе приложения не видны.
При запуске Visual Basic открывающаяся на экране форма не содержит элементов управления. После щелчка на пиктограмме требуемого элемента управления курсор мыши принимает форму крестика. Теперь нужно указать в форме начальный угол элемента управления, нажать левую кнопку мыши и, не отпуская ее, установить размер элемента. После достижения нужного размера кнопка отпускается и в форме появляется выбранный элемент управления.

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

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

Окно проекта.
В окне проекта отображаются все элементы приложения: формы, модули, классы и т.п., сгруппированные по категориям. В Visual Basic все разрабатываемые приложения называются проектами. Проект содержит несколько групп компонентов (формы, модули и т.п.). Все приложения Visual Basic строятся по модульному принципу, поэтому и объектный код состоит не из одного большого файла, а из нескольких частей. Несколько приложений также могут объединяться в группы.

Окно расположения формы.
Оно показывает, где будет располагаться окно формы на экране монитора в период выполнения программы. Положение формы можно изменять перетаскиванием мышью.

Панель инструментов Visual Basic.
В верхней части экрана находится центр управления Visual Basic — панель инструментов (Toolbar). Ее можно настраивать, как это обычно делается в приложениях Microsoft.

Окно кода.

Сразу после запуска Visual Basic это окно не отображается. Тем не менее, оно едва ли не самое важное в Visual Basic, так как именно в нем вводится программный код. Код в Visual Basic разделяется на процедуры и, как правило, непосредственно связан с определенными элементами управления.


Итак. Запускайте Visual Basic, создайте стандартный проект. Ознакомитесь с основными элементами рабочей среды.

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

Для обращения к объекту в приложении предназначено свойство Имя (Name), первоначальное значение которого образуется автоматически. Например, кнопка (CommandButton), помещенная на форму первой, получает имя Command1, второй - Command2 и т.д. Обычно разработчик предпочитает дать объектам более информативные имена, чем имена по умолчанию. Целесообразно объекта присваивать имена, которые дают возможность распознать их тип и назначение. Пример: frmMyForm, cmdExit.

Элемент управления

Стандартные префиксы

Обычная форма (Form)

frm

Кнопка (Command button)

сmd

Надпись (Label)

lbl

Текстовое поле (Text box)

txt

Флажок (Check box)

chk

Переключатель (Option button)

opt

Окно с рисунком (Picture bох)

pic

Рамка (Frame)

fra

Фигура (Shape)

shp

Изображение (Image)

img

Список (List box) 

lst

Поле со списком (Combo box)

cbo

Внимание! Свойство Name играет особую роль. Ошибки при его задании часто приводят к серьезным последствиям. Имя является идентификатором элемента управления. Поэтому сначала всегда следует задавать имя элемента управления и лишь затем писать для него код обработки его события.

Иногда, начинающие программисты путают свойства Имя (Name) и Caption. Имя - это идентификатор объекта. Свойство Caption определяет текст надписи на объекте. Например, по умолчанию для формы свойство Имя и свойство Caption установлены "Form1".

Установите с помощью окна свойств следующие значения: Имя - frmMyForm, Caption - "Моя форма". Запустите программу и обратите внимание на верхний левый угол окна.

Вы увидите надпись: .

Программным способом свойство Caption можно так: frmMyForm.Caption = "Это моя форма". Получим: .


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

Имя

Для обращения к объекту в приложении предназначено свойство Имя (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

Готово! Вот результат работы:

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Изучаем события, связанные с активностью мыши.

Давайте попробуем разобраться, как происходит рисование с помощью мыши в графических редакторах.

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

Готово!

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Использование элементов управления.

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

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

Классы управляющих элементов имеют различное назначение в графическом интерфейсе приложения.

Почти во всем приложениях используется кнопка (CommandButton) для того, чтобы начать, прервать или закончить какой-либо процесс. Главным событием для кнопки является Click. Кроме этого события, у кнопки могут быть и другие, но они применяются редко.

Текстовые поля (TextBox), метки (Label) и списки (ListBox) обычно используются для ввода и вывода данных, графические окна (PictureBox) - для вывода графики, переключатели (CheckBox) и флажки (OptionsButton) - для организации диалога.

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

В обработке события может участвовать несколько объектов. Например, при щелчке по Объекту1 могут изменяться свойства его свойства и его методы, но могут изменятся свойства и вызываться методы Объекта2.

Рассмотрим пример. Создадим приложение, реализующее либо сложение чисел, либо конкатенацию строк.

Разместите на форме следующие управляющие элементы и задайте им свойства, указанные в таблице:

Объект

Свойство

Значение

Форма

имя

frmCalc

Caption

Калькулятор

Текстовое поле - TextBox

имя

txt1

text

"" (пустая строка)

Текстовое поле - TextBox

имя

txt2

text

"" (пустая строка)

Текстовое поле - TextBox

имя

txtResult

text

"" (пустая строка)

Кнопка - CommandButton

имя

cmdPlus

Caption

Сложить

Кнопка - CommandButton

имя

cmdSplic

Caption

Склеить

Надпись - Label

Caption

+ (плюс)

Надпись - Label

Caption

Результат

Напишем процедуру обработки щелчка на кнопке "Склеить".

Так как для кнопки основное событие - щелчок, то окно кода можно вызвать двойным щелчком по кнопке в окне формы.

Private Sub cmdSplic_Click()
    txtResult.Text = txt1.Text + txt2.Text
End Sub

В Visual Basic оператор + (плюс) может использоваться как для математического сложения, так и для соединения (конкатенации) строк.
Поэтому при сложении лучше использовать символ
+, а при соединении строк — символ &. В противном случае могут возникнуть неожиданные последствия.

Private Sub cmdSplic_Click()
    txtResult.Text = txt1.Text
& txt2.Text
End Sub

Проверим работу приложения. Введем в текстовые поля какой-то текст и нажмем кнопку "Склеить".

Теперь займемся обработкой события щелчка по кнопке "Сложить". Перед суммированием значений текстовых полей их необходимо преобразовать в числа. Функция VAL(s$) - преобразует числовую часть начала строки в число.

Private Sub cmdPlus_Click()
    txtResult.Text = Val(txt1.Text) + Val(txt2.Text)
End Sub

Готово!

Для быстрого открытия меню или вызова команды используются горячие клавиши. Для определения горячих клавиш достаточно в свойстве Caption перед соответствующей буквой поставить амперсанд (&). Например, для быстрого вызова команды "Сложить" в Caption необходимо ввести "&Сложить". Если же в качестве горячих клавиш нужно определить [Alt+к] для кнопки "Склеить", то в свойство Caption следует задать "С&клеить".

Теперь вместо нажатия на кнопки "Склеить" и "Сложить" можно использовать комбинации клавиш: [Alt + к] и [Alt + с].
Вот теперь - готово!

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Использование переключателей и флажков.

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

Флажки — это элементы управления, которые можно отмечать (ставить "галочку"), выбирая из ряда опций одну или несколько. CheckBox может иметь два различных состояния — отмеченное и не отмеченное.

Переключатель (OptionButton) - элемент управления, представляющий собой кружок с точкой или без, предназначен для установки только одной опции из группы. Обычно все переключатели формы объединены в одну группу. Если вы желаете сформировать новую группу переключателей, то нужно поместить их в отдельный элемент-контейнер, например Frame.

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

Запустите VisualBasic. Создайте новый стандартный проект. Добавьте на форму компоненты и задайте им свойства приведенные в таблице.

 

Объект

Свойство

Значение

Форма

имя

frmMyForm

Caption

Запись в файл

Надпись - Label

Caption

Имя &файла:

Текстовое поле - TextBox

имя

txtFileName

text

"Мой файл.txt" (пустая строка)

Текстовое поле - TextBox

имя

txtInput

text

"" (пустая строка)

MiltiLine

True

Рамка - Frame

 

 

text

Действие

Переключатель - Option

имя

Option1

Caption

Добавить в файл

Переключатель - Option

имя

Option2

Caption

Переписать

Кнопка - CommandButton

имя

cmd1

Caption

&Запись

Флажок

имя

Check1

Caption

Очистить текстовое поле

 

Value

1 - Отмечено

 Для того чтобы текстовое поле сделать многострочным мы присвоили его свойству MiltiLine значение True (Истина).

 

Теперь необходимо написать обработчик события щелчка по кнопке "Запись".

Первым дело проверим не пусто ли "имя файла".

Private Sub cmd1_Click()
If Len(txtFileName.Text) Then
End If
End Sub

Дальше в зависимости от того какой переключатель выбран откроем файл в соответствующем режиме.

Private Sub cmd1_Click()
If Len(txtFileName.Text) Then
If Option1.Value = True Then Open txtFileName.Text For Append As #1
If Option2.Value = True Then Open txtFileName.Text For Output As #1
Close #1

End If
End Sub

Следующий шаг - запись в файл содержимого текстового поля.

Private Sub cmd1_Click()
If Len(txtFileName.Text) Then
If Option1.Value = True Then Open txtFileName.Text For Append As #1
If Option2.Value = True Then Open txtFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
End If
End Sub

Очистим поле ввода, если установлен соответствующий флаг. Свойство Value объекта Флажок(Check) может принимать одно из трех значений:

  • 0 - не отмечен;
  • 1 - отмечен;
  • 2 - отмеченный, но не доступный (устанавливается программно).

Private Sub cmd1_Click()
If Len(txtFileName.Text) Then
If Option1.Value = True Then Open txtFileName.Text For Append As #1
If Option2.Value = True Then Open txtFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
If Check1.Value = 1 Then txtInput.Text = ""
End If
End Sub

Приложение почти готово. Но имеется один недостаток: если поле "Имя файла" пусто, запись в файл не производится. А пользователь об этом не знает! Необходимо ему это сообщить.

Для вывода различных сообщений имеется окно MessageBox. Почти все приложения Windows используют MessageBox, так как этот компонент входит в состав Windows, a Visual Basic только предоставляет возможность его вызова.

Вид окна MessageBox может быть различным, но в его состав всегда входят:

  • текст сообщения;
  • заголовок;
  • пиктограмма;
  • набор кнопок.

Для вывода этого окна используется функция MsgBox, которая возвращает информацию о том какую кнопку нажал пользователь (полезно при анализе ответа пользователя).

Вызывается функция так:
Возвращаемое_значение = MsgBox (Сообщение [, Кнопки и значки] [, Заголовок] [, Файла помощи, Context])

Private Sub cmd1_Click()
If Len(txtFileName.Text) Then
If Option1.Value = True Then Open txtFileName.Text For Append As #1
If Option2.Value = True Then Open txtFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
If Check1.Value = 1 Then txtInput.Text = ""
Else
MsgBox "
Необходимо ввести имя файла", vbExclamation, "Внимание!"
End If
End Sub

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

Готово. Запустите проект и "проиграйтесь" с ним. Затем откройте файл, в который сохранялась информация (если вы не указали полный путь в имени, то файл будет находится в папке с проектом) и убедитесь в правильности работы программы.

 

Получим:

  

  

!!! Не забудьте сохранить проект. Он нам потребуется на следующем занятии. !!!

 

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Использование списков.

Давайте продолжим работу с проектом, который мы создали на предыдущем занятии.

Вспомним: имя файла, в который записывается информация вводилось в текстовом поле txtFileName. Для того чтобы облегчить жизнь пользователю, по-умолчанию, свойство text имело какое-то значение (например, "Мой файл.txt").

На этом занятии модернизируем проект таким образом, чтобы "ленивому" пользователю предоставить больший выбор. Для этого заменим текстовое поле - полем со списком.

Поле со списком (ComboBox) — это по сути комбинированный список, который представляет собой комбинацию двух элементов управления — самого списка со значениями и поля ввода текста (текстового поля).

Список (ListBox) — позволяет пользователю выбирать из списка один или несколько элементов. В любое время в список можно добавлять новые элементы или удалять существующие. Если не все элементы могут одновременно отобразиться в поле списка, то в нем автоматически отображаются полосы прокрутки.

Поля со списком используются в том случае, если нельзя заранее определить значения, которые
следует включить в список, или список содержит слишком много элементов. В таком списке нужное значение можно не только выбирать, но и вводить непосредственно в поле ввода. Новое значение после ввода автоматически помещается в список.

Для поля со списком важную роль играют события как поля ввода, так и списка. Основные из них  - Click, используемое для выбора элемента списка, и - Change — для изменения записи в поле ввода текста.

Поле со списком имеет почти все свойства текстового поля (TextBox) и списка (ListBox) (исключением является свойство MultiLine). Однако особо следует выделить свойство Style, определяющее внешний вид и функционирование поля со списком.

Откройте проект. Замените текстовое поле на поле со списком.

Задайте имя объекту - cboFileName, и задайте элементы списка (свойство List).

Свойство списка Text — самая простая возможность получить текст выбранного элемента списка. В любой момент времени значение этого свойства содержит текст выбранного элемента списка или пустую строку, если ни один элемент не выбран. Для определения текста выбранного элемента существуют и другие возможности. Однако следует помнить, что и в памяти все элементы списка сохраняются в виде списка. При этом первый элемент списка имеет индекс 0.

Присвоим этому свойству значение "Мой файл.txt" - это будет значение по-умочанию.

Запустим проект на выполнение. Теперь пользователь может выбрать имя для файла из списка или ввести самостоятельно. Но если щелкнуть кнопку СОХРАНИТЬ, то появится сообщение об ошибке. А все оттого, что мы не исправили код записи в файл. Имя файла берется из текстового поля, но ведь мы его заменили на список.

Private Sub cmd1_Click()
If Len(txtFileName.Text) Then
If Option1.Value = True Then Open txtFileName.Text For Append As #1
If Option2.Value = True Then Open txtFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
If Check1.Value = 1 Then txtInput.Text = ""
Else
MsgBox "
Необходимо ввести имя файла", vbExclamation, "Внимание!"
End If
End Sub

Исправим этот код.

Private Sub cmd1_Click()
If Len(
cboFileName.Text) Then
If Option1.Value = True Then Open
cboFileName.Text For Append As #1
If Option2.Value = True Then Open
cboFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
If Check1.Value = 1 Then txtInput.Text = ""
Else
MsgBox "
Необходимо ввести имя файла", vbExclamation, "Внимание!"
End If
End Sub

Теперь программа работает, но продолжим улучшение. Сделаем так, чтобы после добавление в файл, имя которого пользователь ввел сам, имя этого файла добавлялось в список. Для добавления в список служит метод AddItem.

Private Sub cmd1_Click()
If Len(cboFileName.Text) Then
cboFileName.AddItem (cboFileName.Text)
If Option1.Value = True Then Open cboFileName.Text For Append As #1
If Option2.Value = True Then Open cboFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
If Check1.Value = 1 Then txtInput.Text = ""
Else
MsgBox "
Необходимо ввести имя файла", vbExclamation, "Внимание!"
End If
End Sub

Теперь при щелчке по кнопке ЗАПИСЬ в список добавляется новое значение. Но теперь появилась одна неприятная особенность - при записи в один и тот же файл, его имя несколько раз добавляется в список. Исправим это. Прежде чем добавить значение в список, переберем его и проверим нет ли уже такого значения. Переменную already будем использовать как флаг, который будет указывать нашли (1) или не нашли (0) такое значение в списке.

Private Sub cmd1_Click()
If Len(cboFileName.Text) Then
For i = 0 To cboFileName.ListCount
If cboFileName.List(i) = cboFileName.Text Then already = 1
Next i
If already = 0 Then
cboFileName.AddItem (cboFileName.Text)
If Option1.Value = True Then Open cboFileName.Text For Append As #1
If Option2.Value = True Then Open cboFileName.Text For Output As #1
Print #1, txtInput.Text
Close #1
If Check1.Value = 1 Then txtInput.Text = ""
Else
MsgBox "
Необходимо ввести имя файла", vbExclamation, "Внимание!"
End If
End Sub

Готово! Запустите проект и проверьте его работу.

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Простой текстовый редактор.

На этом занятии мы создадим простой текстовый редактор (почти такой как стандартный Блокнот).

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

Объект

Свойство

Значение

Форма

имя

frmNotepad

Caption

Блокнот

Текстовое поле - TextBox

имя

txtNotepad

text

"" (пустая строка)

MiltiLine

True

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

Создание меню в Visual Basic осуществляется с помощью специального инструмента создания меню — редактора меню. Окно редактора меню открывается одним из трех способов: путем нажатия комбинации клавиш [Ctrl+E], нажатием соответствующей кнопки на панели инструментов или после выбора команды меню Инстументы>Редактор меню... (Tools>Menu Editor...).

 Проще всего создавать меню при помощи встроенного редактора меню Visual Basic. Для этого сначала в поле Название (Caption) окна редактора вводится текст, который будет виден в строке меню. Для быстрого открытия меню или вызова команды используются горячие клавиши. Для определения горячих клавиш достаточно в поле Название (Caption) перед соответствующей буквой поставить амперсанд
(&). Например, для быстрого открытия меню File в поле Caption диалогового окна редактора меню необходимо ввести "&File".

Второй шаг — назначение имени элементу меню (так же, как любому элементу управления). Учтите, что Visual Basic не задает имя по умолчанию, как для других элементов управления. При назначении имен элементам меню также нужно соблюдать правила. Имя должно состоять из следующих частей: прежде всего, префикса, указывающего, что это меню, т.е. mnu; затем следует: для пунктов главного
меню — имя пункта, для подменю — сокращенные имена родительских пунктов, а затем собственное имя меню.

Последняя задача при создании меню — определение уровней. Для этого воспользуйтесь кнопками со стрелками. Кнопка со стрелкой вправо смещает элемент меню на уровень ниже, а со стрелкой влево — на уровень выше. Кнопки с вертикальными стрелками изменяют позицию отдельных элементов меню, т.е. перемещают их в списке вверх или вниз.

Поле Быстрая клавиша (Shortcut) позволяет определить комбинации клавиш для быстрого доступа к отдельным элементам меню. Среди наиболее часто используемых приложениями Windows комбинаций клавиш можно отметить следующие: [Ctrl+X] (Вырезать - Cut), [Ctrl+C] (Копировать - Copy), [Ctrl+V] (Вставить - Paste).

В последней строке верхней половины окна редактора меню есть еще три свойства элементов меню. Свойство Видимо (visible) позволяет отображать или скрывать отдельные элементы меню. Свойство Включено (Enabled) функционирует так же, как в других элементах управления: если его значение False, то текст надписи подсвечивается серым цветом и пользователь не может выполнить эту команду меню. Свойство Отмечено (Checked) встречается в данной книге впервые. Оно позволяет пометить выбранный элемент меню галочкой. 

Свойства элементов меню можно изменять и во время выполнения. При этом синтаксис такой же, как и для других элементов управления.

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

Итак создадим меню.

Структура меню представлена на рисунке:

 

Имя

Название (Caption)

Быстрая клавиша

mnuFile

&Файл

 

mnuFNew

Созд&ать

Ctrl+N

mnuFOpen

&Открыть...

Ctrl+O

mnuFSave 

&Сохранить

Ctrl+S

mnuFSaveAs 

Сохранить &как...

 

mnuEdit 

&Правка

 

mnuECut

&Вырезать

Ctrl+X

mnuECopy

&Копировать

Ctrl+C

mnuEPaste

Вст&авить

Ctrl+V

mnuEDel 

&Удалить

 

Нажимаем [Ok] и получаем готовое меню (осталось, только, добавить обработку кликов по его пунктам).

 

Напишем обработчики событий щелчка по пунктам меню.

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

Одно из основных достоинств Windows — средства поддержки работы в многозадачном режиме, позволяющие одновременно выполнять несколько приложений и других процессов. Для организации передачи данных и связи между программами в Windows созданы инструменты и структуры, обеспечивающие простое решение указанных задач.
Одна из таких возможностей — обмен данными через буфер обмена (Clipboard). Команды Cut (Вырезать), Copy (Копировать) и Insert (Вставить), которые имеются в меню Edit (Правка) всех программ, работающих в среде Windows, используют буфер обмена для временного хранения данных.

Буфер обмена является общим хранилищем данных для всех приложений Windows. Поэтому данными, помещенными в буфер обмена, можно воспользоваться в любом приложении Windows. Однако при этом следует учитывать формат данных. Содержимое буфера обмена можно просмотреть с помощью программы CLIPBRD.EXE, входящей в состав Windows.

Доступ к буферу обмена Windows из приложения VisualBasic обеспечивает объект Clipboard.

Чтобы каждый элемент управления получал данные в понятном для него формате, например, объект TextBox — символьные строки, a PictureBox — графические изображения, следует использовать соответствующие методы объекта Clipboard. Методы SetText и GetText соответствующих объектов предназначены для работы с текстом, а методы GetData и SetData — для работы с графикой. Используя различные методы, разработчик при передаче информации может обеспечить совместимость форматов данных для выбранного элемента управления.
Для записи и считывания текстовых данных в объект clipboard и из него предназначены методы SetText и GetText. 

Метод SetText записывает текстовую строку в буфер обмена и заменяет текущее содержимое буфера.

Скопировать содержимое выделенного текстового поля txtNotepad в буфер обмена можно следующим оператором:
Clipboard.SetText txtNotepad.Text

Метод GetText возвращает содержимое буфера обмена в виде текстовой строки.

Чтобы заменить выделенный текст в текстовом поле содержимым буфера обмена, следует воспользоваться методом GetText:
txtNotepad.SelText = Clipboard.GetText()

Если буфер обмена содержит данные, то после вызова метода SetData или SetText данные указанного формата переписываются в объект, но в буфере сохраняются данные в других форматах. Чтобы в буфере не находились одновременно данные из нескольких приложений, перед экспортом данных в Clipboard следует удалить все его содержимое. Для этого применяется метод Clear:
Clipboard.Clear

Private Sub mnuECopy_Click()
Clipboard.Clear
Clipboard.SetText txtNotepad.SelText
End Sub

Private Sub mnuECut_Click()
Clipboard.Clear
Clipboard.SetText txtNotepad.SelText
txtNotepad.SelText = ""
End Sub

Private Sub mnuEDel_Click()
txtNotepad.SelText = ""
End Sub

Private Sub mnuEPaste_Click()
txtNotepad.SelText = Clipboard.GetText()
End Sub

Для реализации операций с файлами потребуется дополнительный элемент управления - диалоговое окно (CommonDialоg). Это дополнительный элемент управления. Для того чтобы он появился на панели компонентов необходимо выполнить следующие действия:

Выбрать в VisualBasic Проект > Компоненты (или [Cntr+T] )и установить флажок у компонента Microsoft Common Dialog Control 6.0.

 

 

Панель компонентов дополнится новым компонентом. Переместите его на форму в любое место (этот компонент не визуальный и виден не будет). Присвойте новому объекту имя (name): dlgFile.  Затем вызовете страницы свойств (щелчок правой кнопкой > Propirties) и установите нужные свойства на соответствующей закладке (в зависимости от того какой диалог вы вызываете).

Теперь напишем код обработки щелчков по пунктам меню "Файл".

Private Sub mnuFNew_Click()
txtNotepad.Text = ""
dIgFile.FileName = ""
End Sub

Private Sub mnuFOpen_Click()
dIgFile.ShowOpen
If dIgFile.FileName <> "" Then
Open dIgFile.FileName For Input As #1
Do While Not EOF(1)
Input #1, s$
txtNotepad.Text = txtNotepad.Text + s$ + vbCrLf   'vbCrLf -
символ перевода строки (chr (13) & Chr (10))
Loop
Close #1
End If
End Sub

Private Sub mnuFSave_Click()
If dIgFile.FileName <> "" Then
Open dIgFile.FileName For Output As #1
Print #1, txtNotepad.Text
Close #1
Else
mnuFSaveAs_Click
End If
End Sub

Private Sub mnuFSaveAs_Click()
dIgFile.ShowSave
If dIgFile.FileName <> "" Then
Open dIgFile.FileName For Output As #1
Print #1, txtNotepad.Text
Close #1
End If
End Sub

Приложение работает. Теперь мы имеем возможность производить простые операции редактирования текста (копировать, вырезать, вставлять) и операции открытия и сохранения файлов.

 

Продолжим.

Для удобства работы дополним текстовое поле полосой прокрутки. Добавим вертикальную прокрутку, для этого свойству ScrollBars установим соответствующее значение. Теперь, если весь текст не вмещается в текстовое поле, появится полоса прокрутки.


Обратимся к меню. В меню должны быть доступны только те действия, которые имеют смысл в данный момент. Другими словами, если нет выделенного текста или изображения, команды копирования и вырезания должны быть недоступны.
Обычно если какой-либо элемент управления не может в данный момент выполнить требуемых от него действий, этот элемент управления должен быть недоступен. Поэтому нужно проверять, какая команда меню может быть выполнена в данный момент: вырезания и копирования или вставки. В зависимости от этого соответствующие команды в меню должны быть доступны или недоступны.
Лучше всего такую проверку выполнять путем обработки события Click команды меню Edit. Это событие наступает, как только пользователь откроет соответствующее меню. В процедуре обработки события можно поместить подпрограмму, определяющую состояние команды меню. Например, можно проверить, позволяет ли текущее состояние программы выполнить требуемое действие.

Пункт "Вставка" должен быть активен только в том случае, если в буфере обмена есть текст.

Private Sub mnuEdit_Click()
mnuEPaste.Enabled = False
If Clipboard.GetText() <> "" Then mnuEPaste.Enabled = True
End Sub

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

Private Sub mnuEdit_Click()
mnuEPaste.Enabled = False
mnuECut.Enabled = False
mnuECopy.Enabled = False
mnuEDel.Enabled = False 

If Clipboard.GetText() <> "" Then mnuEPaste.Enabled = True
If txtNotepad.SelText <> "" Then
mnuECut.Enabled = True
mnuECopy.Enabled = True
mnuEDel.Enabled = True
End If

End Sub

Хорошо. Теперь меню работает как надо!

Осталось исправить еще одну неприятную особенность: при изменении размеров окна размеры текстового поля не изменяются, в результате возникает такая вот картина:

Исправим. Добавим код изменяющий размеры текстового поля, если происходит изменение размеров формы:

Private Sub Form_Resize()
txtNotepad.Top = 0
txtNotepad.Left = 0
txtNotepad.Width = frmNotepad.Width - 100
txtNotepad.Height = frmNotepad.Height - 800
End Sub

Так как на форме не только текстовое поле, но и меню, и полоса прокрутки нам пришлось вычесть их размеры.

Готово! Теперь приложение готово! Мы создали полноценный текстовый редактор.

Язык программирования Microsoft VisualBasic. Учимся программировать! Конспекты школьника.

Текстовый редактор с возможностью форматирования текста.

На этом занятии мы продолжим работать над проектом текстового редактора. Сделаем его более продвинутым: научим форматировать текст и добавим панель инструментов.

Добавим в меню новый пункт, позволяющий пользователю вызвать окно выбора шрифта.

 

Имя

Название (Caption)

Быстрая клавиша

mnuFile

&Файл

 

mnuFNew

Созд&ать

Ctrl+N

mnuFOpen

&Открыть...

Ctrl+O

mnuFSave 

&Сохранить

Ctrl+S

mnuFSaveAs 

Сохранить &как...

  

mnuEdit 

&Правка

  

mnuECut

&Вырезать

Ctrl+X

mnuECopy

&Копировать

Ctrl+C

mnuEPaste

Вст&авить

Ctrl+V

mnuEDel 

&Удалить

  

mnuFormat

Фор&мат

 

mnuFFont

&Шрифт

 

Для выбора шрифта воспользуемся компонентом CommonDialоg (тот который на прошлом занятии использовали для выбора файла при сохранении или открытии), содержит стандартные диалоговые окна Windows: открыть/сохранить файл, цвет, шрифт, печать, помощь.

Присвойте объекту имя (name): dlgMyDialоg.  Затем вызовете страницы свойств (щелчок правой кнопкой > Propirties) и установите нужные свойства на закладке "Font" (Шрифт).

У CommonDialog есть свойство Flags которое управляет многими параметрами диалога. Полный список всех констант можно получить с помощью проводника объектов (Object browser) Вид > Проводник объектов или F2.

В нашем примере свойство Flags мы установили = 258. Откуда взялось это значение? Это сумма двух констант cdlCFPrinterFonts = 2 (использовать только те шрифты, которые поддерживают принтеры) и cdlCFEffects = 256 (разрешить эффекты форматирования: подчеркивание, зачеркивание и выбор цвета на панели выбора шрифта).

Это свойство можно было бы задать и программно. Например, так:
dlgMyDialоg.Flags =  cdlCFPrinterFonts  + cdlCFEffects 
или так:
dlgMyDialоg.Flags = 256 + 2
или так:
dlgMyDialоg.Flags = 258

Работаем дальше.

Не забудьте заменить во всем коде программы dlgFile на dlgMyDialоg (т.к. мы изменили имя объекта: был dlgFile, а стал - dlgMyDialоg). Для этого удобно воспользоваться командой Правка > Заменить...

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

Прежде чем писать обработчик события для нового пункта меню, необходимо произвести еще одну замену: необходимо обычное текстовое поле заменить компонентом RichTextBox. Все дело в том, что обычное текстовое поле не позволяет изменять параметры шрифта для части текста, позволяет изменить только то как будет отображаться текст в текстовом поле. Для примера сравните стандартные программы Windows Блокнот и WordPad.

Это дополнительный элемент управления. Для того чтобы он появился на панели компонентов необходимо выполнить следующие действия:

Выбрать в VisualBasic Проект > Компоненты (или [Cntr+T] )и установить флажок у компонента Microsoft Rich Textbox 6.0.

Замените текстовое поле усовершенствованным текстовым полем.

Объект

Свойство

Значение

RichTextbox 

имя

txtNotepad

text

"" (пустая строка)

MiltiLine

True

Вот теперь создадим обработчик меню Формат > Шрифт...

Для вызова окна выбора шрифта используется метод ShowFont. Перед выводом окна зададим первоначальные значения в соответствии с выделенным текстом (название шрифта, размер, начертание: жирный, начертание: курсив).

Private Sub mnuFFont_Click()

dlgMyDialоg.FontName = txtNotepad.SelFontName
dlgMyDialоg.FontSize = txtNotepad.SelFontSize
dlgMyDialоg.FontBold = txtNotepad.SelBold
dlgMyDialоg.FontItalic = txtNotepad.SelItalic
dlgMyDialоg.Color = txtNotepad.SelColor
dlgMyDialоg.FontStrikethru = txtNotepad.SelStrikeThru
dlgMyDialоg.FontUnderline = txtNotepad.SelUnderline

dlgMyDialоg.ShowFont

End Sub

После того как пользователь выбран нужные параметры присвоим их выделенному тексту.

Private Sub mnuFFont_Click()
dlgMyDialоg.FontName = txtNotepad.SelFontName
dlgMyDialоg.FontSize = txtNotepad.SelFontSize
dlgMyDialоg.FontBold = txtNotepad.SelBold
dlgMyDialоg.FontItalic = txtNotepad.SelItalic
dlgMyDialоg.Color = txtNotepad.SelColor
dlgMyDialоg.FontStrikethru = txtNotepad.SelStrikeThru
dlgMyDialоg.FontUnderline = txtNotepad.SelUnderline

dlgMyDialоg.ShowFont

txtNotepad.SelFontName = dlgMyDialоg.FontName
txtNotepad.SelFontSize = dlgMyDialоg.FontSize
txtNotepad.SelBold = dlgMyDialоg.FontBold
txtNotepad.SelItalic = dlgMyDialоg.FontItalic
txtNotepad.SelColor = dlgMyDialоg.Color
txtNotepad.SelStrikeThru = dlgMyDialоg.FontStrikethru
txtNotepad.SelUnderline = dlgMyDialоg.FontUnderline

End Sub

Теперь мы можем форматировать текст.

Если вы желаете, чтобы текст сохранялся как обычно, без форматирования, то можете оставить все как есть.

Для того чтобы сохранить (а также открыть) форматированный текст необходимо изменить свойства dlgMyDialоg: фильтр - Текстовые файлы(*.txt)|*.txt|Файлы RTF(*.rtf)|*.rtf, ФильтрИндекс - 2 (По-умолчанию показывать 2-й фильтр);


и функции mnuFSave_Click(), mnuFSaveAs_Click(), mnuFSave_Click().

Private Sub mnuFSave_Click()
If dlgMyDial
оg.FileName <> "" Then
txtNotepad.SaveFile dlgMyDial
оg.FileName
Else
mnuFSaveAs_Click
End If
End Sub

Private Sub mnuFSaveAs_Click()
dlgMyDial
оg.ShowSave
If dlgMyDial
оg.FileName <> "" Then
txtNotepad.SaveFile dlgMyDial
оg.FileName
End If
End Sub

Private Sub mnuFOpen_Click()
dlgMyDial
оg.ShowOpen
If dlgMyDial
оg.FileName <> "" Then
txtNotepad.LoadFile dlgMyDial
оg.FileName
End If
End Sub

Готово!

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

Панель инструментов служит для быстрого ввода команд.  Этот элемент управления не входит в стандартный набор управляющих элементов. Для работы с ним необходимо воспользоваться дополнительным набором управляющих элементов Microsoft Windows Common Control 6.0.

Выберите в VisualBasic Проект > Компоненты (или [Cntr+T] )и установить флажок у компонента Microsoft Windows Common Control 6.0. Панель компонетнов дополнится новыми элементами. Поместите на форму элемент ToolBar.

Далее для создания панели инструментов можно воспользоваться мастером (а можно и не воспользоваться).

Выберем в левой  части те кнопки которые потребуются в нашем приложении.

Жмем [готово] и панель инструментов появится на форме.

Следует обратить внимание на то, что панель инструментов в любой момент можно отредактировать. Для этого щелкните по панели правой кнопкой мыши и выберите пункт "свойства". 

Есть еще один важный момент - обычно, панель инструментов связана с компонентом ImagesList (список изображений). При использовании ранних версий управляющих элементов Microsoft Windows Common Control, например, 5.0, приходилось ImagesList добавлять самостоятельно. В нашем случае компонент ImagesList добавляется и настраивается автоматически.

Найдете этот компонент на форме (для этого лучше воспользоваться  Окном свойств) и посмотрите его свойства.

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

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
On Error Resume Next
Select Case Button.Key
Case "New"
'ToDo: Add 'New' button code.
MsgBox "Add 'New' button code."
Case "Open"
'ToDo: Add 'Open' button code.
MsgBox "Add 'Open' button code."
Case "Save"
'ToDo: Add 'Save' button code.
MsgBox "Add 'Save' button code."
Case "Copy"
'ToDo: Add 'Copy' button code.
MsgBox "Add 'Copy' button code."
Case "Cut"
'ToDo: Add 'Cut' button code.
MsgBox "Add 'Cut' button code."
Case "Paste"
'ToDo: Add 'Paste' button code.
MsgBox "Add 'Paste' button code."
Case "Delete"
'ToDo: Add 'Delete' button code.
MsgBox "Add 'Delete' button code."
End Select
End Sub

Для каждой кнопки назначим соответствующую процедуру уже созданную для пунктов меню.

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
On Error Resume Next
Select Case Button.Key
Case "New"
mnuFNew_Click
Case "Open"
mnuFOpen_Click
Case "Save"
mnuFSave_Click
Case "Copy"
mnuECopy_Click
Case "Cut"
mnuECut_Click
Case "Paste"
mnuEPaste_Click
Case "Delete"
mnuEDel_Click
End Select
End Sub

Теперь исправим процедуры обработки изменения размера формы (Resize) так как панель инструментов теперь закрывает часть текстового поля.

Private Sub Form_Resize()
txtNotepad.Top = Toolbar1.Height
txtNotepad.Left = 0
txtNotepad.Width = frmNotepad.Width - 100
txtNotepad.Height = frmNotepad.Height - 800
End Sub

Программа почти готова. Почти? "Проиграйтесь" с программой и вы обнаружите ошибку: если выделить текст разного формата, то при выборе пункта Формат > Шрифт возникает ошибка при установки параметров окна выбора формата шрифта.

Для борьбы с этой неприятностью воспользуемся оператором перехвата ошибок On Error.

Оператор On Error не выполняет непосредственно никакой обработки ошибок, а лишь передает управление ответственному за обработку ошибок фрагменту программы.

Для определения типа ошибки можно использовать объект Err, свойство которого Number содержит код последней возникшей ошибки.

Итак, в начале процедуры помещается оператор On Error для перехвата возникающих ошибок. В нем указывается метка, к которой происходит переход при возникновении ошибки. Обычно эта метка находится в конце процедуры и перед ней помещается оператор Exit. Благодаря этому оператору, при безошибочном выполнении процедура в этом месте завершает свою работу, и
фрагмент процедуры после метки выполняется только после возникновения ошибки.

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

После корректной обработки ошибки программа должна продолжить свое выполнение. Чтобы программа продолжала выполняться в строке, в которой возникла, а затем была устранена ошибка, в обработчике указывается оператор Resume.

Завершив обработку ошибки, следует продолжить нормальное выполнение программы. Ключевое слово Resume позволяет вернуться в строку, вызвавшую ошибку, для ее повторного выполнения, а оператор Resume Next возвращает в следующую за строкой с ошибкой строку.

Private Sub mnuFFont_Click()
On Error GoTo ErrLabel 'Включает обработку ошибок
dlgMyDialоg.FontName = txtNotepad.SelFontName
dlgMyDialоg.FontSize = txtNotepad.SelFontSize
dlgMyDialоg.FontBold = txtNotepad.SelBold
dlgMyDialоg.FontItalic = txtNotepad.SelItalic
dlgMyDialоg.ShowFont
txtNotepad.SelFontName = dlgMyDialоg.FontName
txtNotepad.SelFontSize = dlgMyDialоg.FontSize
txtNotepad.SelBold = dlgMyDialоg.FontBold
txtNotepad.SelItalic = dlgMyDialоg.FontItalic
Exit Sub
ErrLabel: 'обработка ошибки
'тут можно что-то сделать для обработки ошибки
Resume Next

End Sub

Теперь готово! Программа работает.

Top.Mail.Ru Rambler's Top100
Некоторые файлы (разработки уроков, сценарии, поурочные планы) и информация, находящиеся на данном сайте, были найдены в сети ИНТЕРНЕТ, как свободно распространяемые, присланы пользователями сайта или найдены в альтернативных источниках, также использованы собственные материалы. Автор сайта не претендует на авторство ВСЕХ материалов. Если Вы являетесь правообладателем сценария, разработки урока, классного часа или другой информации, и условия на которых она представлена на данном ресурсе, не соответствуют действительности, просьба немедленно сообщить с целью устранения правонарушения по адресу : . Карта сайта - www.uroki.net При использовании материалов сайта - размещение баннера и активной ссылки -ОБЯЗАТЕЛЬНО!!!