Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_metodichka.pdf
Скачиваний:
11
Добавлен:
26.03.2015
Размер:
1.88 Mб
Скачать

4.Для командных кнопок на форме «Пример1» и «Пример2» создать текст процедур обработки события Click, использующий соответственно процедуры а1 и product в соответствии с программным кодом, приведенным в разделе 7.1. Запустить приложение на выполнение и проверить работу записанных процедур.

5.Создать в разделе General программного кода формы еще одну процедуру типа Sub в соответствии с заданием из табл. 7.

6.Создать на форме командную кнопку «Задача» и написать для нее процедуру обработки события Click с использованием созданной процедуры типа Sub для вывода результатов на форму.

7.Сохранить разработанное приложение и проверить его работу как отдельной Windows-программы, выйдя из среды VB.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 7

 

 

 

 

 

 

 

 

 

 

 

 

 

Условия задач

Исходные данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

6

 

+

5

 

 

2

 

 

 

 

 

 

 

 

 

 

x

x

 

 

 

 

 

 

 

D =

 

i=1

i

 

j=1

 

j

 

 

 

 

 

 

 

 

150 +

4

(x

k

+1)

 

 

x ={4;1;3;2;1;0.1 }

 

 

 

 

 

 

 

 

 

 

 

 

k=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2 +5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

W =

 

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

+

5

5

(x

 

+

5)

x ={2;1.5;0.1;2.5;2.7;4.1;6}

 

 

x2

 

 

 

 

 

 

i

 

 

i=1

 

i

 

 

 

 

 

 

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

6

 

 

2

 

n

 

 

 

 

 

1

 

 

n =5

 

E =

y

+ ∏ y2

 

 

 

 

y ={1;3;0.2;5;8;4}

 

 

 

j=1

 

j

i=2

i

 

2

 

 

 

4

 

4

 

 

 

 

5

 

 

 

 

 

 

 

 

a =1.2

 

S =a x +a2 x2

 

 

 

 

x ={2;4;3;1;7}

 

 

i=1

 

i

 

 

i=1

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

T =

5

(F

 

+1)

m

 

 

 

 

 

+1

m =7

 

 

F

j

F ={2;3;1;4;1;0.2;7}

 

i=2

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

72

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

7

 

+

 

6

 

(x

 

+3)2

 

 

 

 

x ={5;1;2;4;3;2;6}

 

W = ∑ x2

 

 

 

 

 

 

 

 

 

 

i=1

i

 

 

i=3

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

A =

 

M

O2 +B +

 

 

 

M

 

 

O3

 

N =2;M =5;B =3.4

 

 

 

 

 

 

 

 

O ={1;2;4;5;0.3}

 

 

i=N

i

 

 

 

 

 

 

 

 

i=N+1

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x ={20;10;5;4}

 

 

 

x

 

 

 

 

4 (x

 

+1)2

 

 

 

 

 

 

 

B = k=1

k

 

+

 

 

 

 

 

 

 

 

 

 

3

 

 

 

i=1

i

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

4

 

 

 

 

+

5

 

 

 

 

 

 

 

 

 

 

 

D =0.3

 

C = D T 2

 

T

 

 

 

 

 

 

T ={4;1;0.2;5;8}

 

 

 

 

i=1

 

i

 

 

 

i=1

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

D =

4

A

 

+

 

3

A2

 

 

 

 

 

 

A ={14;12;7;1}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k=2

k

 

 

 

k

=1

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

B

5

 

 

 

 

2

 

 

2

 

 

 

 

 

 

B =0.2

 

 

 

 

y

 

 

1

 

 

 

 

 

 

 

 

y ={2;3;7;8;9}

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T =

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

D =

 

A B (

 

4

 

 

 

 

 

4

(

 

 

+3)2)

A =2.3

 

 

 

 

 

 

 

 

Kc

B =4

 

 

 

 

 

c=1Kc

 

 

c=1

 

 

 

K ={2;3;1;4}

13

A =

3

 

 

 

 

 

+

3

 

 

 

 

 

+D

 

)2

A ={5;1;3}

 

 

A D

 

(A

j

j

D ={4;6;2}

 

 

i=1

i

 

 

i

 

 

 

 

j=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T =12.8

 

 

 

A2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A ={5;6;1;4;7;3;1;4}

 

C =

 

i=1

 

 

 

+T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

 

4

P

 

+

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

P ={6;5;2;3}

 

W = ∏

 

 

 

(P +1)

 

 

 

 

 

 

 

k=1

k

 

 

 

k=2

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

73

7.3.Контрольные вопросы

1.Какие процедуры называются процедурами общего назначе-

ния?

2.В чем состоит основное отличие процедур общего назначения от процедур обработки событий?

3.Какое назначение имеет функция пользователя?

4.Как вызвать выполнение функции пользователя?

5.Как определяется тип значения функции и ее аргументов?

6.Чем отличаются процедуры типа Sub от процедур типа

Function?

7.Структура описания процедуры типа Sub.

8.Как вызвать процедуру типа Sub без формальных параметров в программном коде?

9.Сколько результатов можно получить, выполняя процедуру типа Sub?

10.Какое назначение в процедуре типа Sub имеют формальные параметры?

11.Как вызывается в программном коде процедура с формальными параметрами?

12.Как сохраняются результаты выполнения процедуры типа

Sub?

13.Как вводятся значения исходных данных в процедуру типа

Sub?

74

8. ПОСТРОЕНИЕ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ

8.1. Общие сведения

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

размещением на окне формы графических элементов управления Линия (Line) и Фигура (Shape) из набора инструментов Toolbox

(рис.1.3);

размещением на окне формы, а также в окнах рисунков PictureBox и окнах изображений Image различных рисунков, подготовленных заранее в виде файлов на дисках;

прорисовкой на окне формы или в окнах рисунков PictureBox на основе программного кода с использованием графических методов

ифункций.

Графический объект Линия (Line) используется для построения линий. После выбора объекта в меню инструментов Toolbox необходимо «протяжкой» мышью указать на форме начало и конец линии. Другие параметры линии задаются указанием конкретных значений для их свойств в окне Properties (см. прил. А).

Графический объект Фигура (Shape) используется для построе-

ния прямоугольников, квадратов, скругленных прямоугольников и скругленных квадратов, окружностей и овалов. После выбора объекта в меню инструментов Toolbox необходимо «протяжкой» мыши указать на форме левый верхний и правый нижний углы прямоугольника. В свойстве Shape задаются типы фигур:

0Rectangle (прямоугольник);

1Square (квадрат);

2Oval (овал, эллипс);

3Circle (окружность);

4Rounded Rectangle (скругленный прямоугольник);

5Rounded Square (скругленный квадрат).

Другие параметры линии задаются указанием конкретных значений для их свойств в окне Properties (см. прил. А).

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

75

Чтобы загрузить рисунок программным путем необходимо ис-

пользовать встроенную функцию LoadPicture. Например, в результате выполнения оператора:

Picture1.Picture = LoadPicture(«d:\slides\ris1»)

в графическое окно Picture1 будет загружен рисунок, находящийся в файле ris1 на диске d: в каталоге slides.

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

которые могут быть применимы к форме (Form), окну рисунка

(PictureBox), принтеру (Printer).

Для использования графических методов необходимо определить систему координат и единицы измерения расстояния на форме или в окне рисунка. Направления осей и начало системы координат, принятые по умолчанию в VB, показаны на рис. 8.1, а единицей измерения служит твип (twip). 1 твип равен 1/1440 дюйма (стандартный экран дисплея в 14 дюймов по диагонали имеет по оси ОX примерно 9000 твип, по оси ОY примерно 7000 твип).

0, 0

X

Высота (Heght)

Ширина (Width)

(x,y)

Y

Рис. 8.1. Система координат для построения графических изображений

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

76

объект.Scale (n1, n2)-(n3, n4)

Здесь (n1, n2) координаты верхнего левого угла, (n3, n4) координаты нижнего правого угла окна формы либо рисунка в задаваемой таким образом системе координат. Например, строка программного кода

Picture2.Scale (-10, 20)-(10, -20)

задает масштаб в 20 условных единиц (в т. н. пользовательском масштабе) по ширине и 40 единиц по высоте окна с расположением начала координат в его центре (рис. 8.2) с масштабом измерения по осям в твипах.

(-10, 20)

(0,0)

(10, -20)

Рис. 8.2. Система координат для окна рисунка PictureBox, отмасштабированного методом Scale в пользовательских единицах

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

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

Line [(x1, y1)]-(x2, y2) [, [цвет][B[F]]

Здесь (x1, y1) координаты начала и (x2, y2) конца линии; цвет определяется непосредственно значением аргументов функции

77

RGB(n1, n2, n3), причем n1 определяет интенсивность красного цвета, n2 зеленого, n3 синего, каждый из которых меняется в пределах от 0 до 255, что позволяет создавать 256х256х256 различных оттенков (см. также назначение функции QBColor(n) в приложении B); В признак вычерчивания прямоугольника, для которого линия является диагональю и указывает координаты противоположных углов прямоугольника; BF признак вычерчивания прямоугольника с закраской его цветом граничных линий.

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

Line (500, 300)(2500, 6000) линия черного цвета (цвет по умолчанию);

Line (500, 300)(2500, 6000), RGB(255, 0, 0) линия красного цвета;

Line (500, 300)(2500, 6000), RGB(0, 100, 0), B прямоугольник с границами зеленого цвета;

Line (500, 300)(2500, 6000), , B прямоугольник с границами черного цвета по умолчанию (две запятые перед символом B обязательны, т.к. это место в аргументах оператора резервируется для задания цвета);

Line (500, 300)(2500, 6000), RGB(0, 0, 200), BF закрашенный прямоугольник синего цвета.

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

Circle (x, y), радиус[, цвет][, начало][, конец][, сжатие]]]]

Здесь (x, y) координаты центра окружности; радиус радиус окружности; цвет цвет окружности, определяемый функцией Rgb описанным выше образом; начало (конец) угол в радианах начала (конца) дуги, построенной на окружности указанного радиуса и цвета, причем, если перед числом поставить символ «» (минус), то будет прорисован сектор круга, опирающийся на дугу с заданными параметрами; сжатие коэффицент сжатия или растяжения окружности, которая превращается в эллипс (овал), причем, если величина коэффициента сжатия больше 1 рисуется эллипс, вытянутый по вертикальной оси, в противном случае по горизонтальной.

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

78

Сircle (3000, 2000), 500 окружность с центром в точке

(3000,2000) и радиусом 500 единиц;

Сircle (3000, 2000), 500, Rgb(0, 0, 255) та же окружность, но синего цвета;

Сircle (3000, 2000), 500, , 0, 3.14 дуга окружности от 0 до 3.14

радиан (верхняя полуокружность);

Сircle (3000, 2000), 500, , -1, -2 сектор круга, опирающийся на дугу окружности от 1 до 2 радиан;

Сircle (3000, 2000), 500, Rgb(0, 255, 0), , , 2 эллипс, вертикаль-

ная полуось которого в 2 раза больше горизонтальной.

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

Pset (x, y)[, цвет]

Здесь (x, y) координаты точки; цвет цвет точки, задаваемый функцией Rgb.

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

FillStyle стиль заполнения замкнутой фигуры (принимает значения от 0 до 7);

FillColor цвет заполнения замкнутой фигуры (значения задаются функцией Rgb или Gbcolor);

DrawWidth ширина линии рисунка (принимает значения от 1

до 32 767);

DrawStyle тип линии рисунка (принимает значения от 0 до 6). Например, после строки кода FillColor=RGB(0, 255, 0) цвет заполнения замкнутой фигуры определяется значением функции Rgb (в данном случае зеленый). Если за этой строкой будет стоять, например,

оператор

Circle (3000, 4500), 240

то в результате получится изображение закрашенной зеленым цветом окружности. Аналогичным образом задаются режимы вычерчивания с помощью свойств FillStyle, BorderWidth и BorderStyle.

Пример 8.1. Программа вычерчивания в окне формы изображения «кораблика» (рис. 8.3).

79

Dim x As Single

Scale (-100, 100)-(100, -100)

Line (-15, 10)-(15, 10)

Line (15, 10)-(20, 20)

Line (-20, 20)-(20, 20)

Line (-20, 20)-(-15, 10)

Line (0, 20)-(0, 80)

Line (0, 20)-(15, 30)

Line (15, 30)-(0, 80)

For x = -50 To 50 Step 0.01

PSet (x, 5 * Sin(x))

Next x

Рис. 8.3. Результат выполнения программы прорисовки «кораблика»

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

8.2.Задание для выполнения на компьютере

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

2.В правой верхней четверти окна формы разместить графическое окно и написать с использованием функции LoadPicture и свойства графического окна Picture процедуру загрузки в него произвольного рисунка из библиотеки VB по щелчку в этом графическом окне мышью.

80

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

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

5.Изменить цвет линий и закраску поверхностей на рисунках с помощью свойств FillColor и FillStyle, а также функции RGB.

6.Изменить на рисунках толщину линий, а также их стиль, ис-

пользуя свойства DrawWidth и DrawStyle.

7.Сохранить разработанное приложение и проверить его работу как отдельной Windows-программы, выйдя из среды VB.

8.3.Контрольные вопросы

1.Какими способами можно создать графические изображения в

VB?

2.Основные свойства графического объекта Shape.

3.Основные свойства графического объекта Line.

4.Назначение и правила использования функции LoadPicture.

5.Для каких объектов применимы графические методы?

6.Как задается масштаб и система координат в VB?

7.Структура графических методов Line, Circle, Pset.

8.Как задать цвет линий рисунка?

9.Как построить закрашенный прямоугольник?

10.Как построить дугу, сектор, овал?

11.Назначение и правила использования функций FillStyle,

FillColor, DrawStyle, DrawWidth.

12.Как задать цвет заполнения окружности, сектора круга?

81

9.СОЗДАНИЕ СЛОЖНЫХ ПРИЛОЖЕНИЙ В СРЕДЕ VB

9.1.Общие сведения

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

Для создания головного приложения в VB служит специальный

модуль редактор меню Menu Editor (рис. 9.1), вызываемый цепочкой команд Tools\Menu Editor... или нажатием на соответствующую кнопку в пиктографическом меню (рис. 1.3)

Заголовок пункта меню

Имя в заголовке процедуры для пункта меню

Окно списка команд головного меню

Рис. 9.1. Диалоговое окно редактора меню Menu Editor

82

Чтобы создать команду в головном меню нужно в диалоговом окне Menu Editor выполнить по крайней мере две операции:

в строке заголовка Caption набрать название пункта (или команды), которое появится в головном меню и для которого можно использовать кириллицу;

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

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

ется для выполнения такой процедуры, будет всегда событием Click щелчком клавишей мыши.

Например, для создания в головном меню команды выхода из приложения (эту команду в VB выполняет оператор End) в диалоговом окне Menu Editor в строке Caption можно набрать слово «Выход», в строке Name имя процедуры, например vyhod. После закрытия диалогового окна на форме появится пункт в головном меню «Выход». Выбрав в окне программного кода объект vyhod, нужно записать программный код процедуры, который в данном случае будет состоять из одного слова End:

Private Sub vyhod_Click()

End

End Sub

Если необходимо создать в головном меню не команду, а меню команд, скажем, пункт меню «Файл», в который входят команды «Открыть», «Сохранить» и «Выход» (рис. 9.1), необходимо вначале в диалоговом окне Menu Editor создать команду «Файл», как описано выше, а затем «вложить» в него эти три команды следующим образом:

1)после строки «Файл» в списке команд диалогового окна создать еще одну строку, нажав клавишу «Next»;

2)сдвинуть запись в этой строке, нажав кнопку со стрелкой «направо», вкладывая таким образом новую команду в пункт меню «Файл»;

83

3)создать для нового пункта соответствующие записи в строках

Caption и Name;

4)повторить пункты 1 и 3 этой процедуры для создания еще двух команд, входящих в меню «Файл»;

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

При этом необходимо учитывать, что сам пункт головного меню «Файл» уже не требует написания для него текста процедуры, по-

скольку он выполняет только одно простое действие раскрыть список входящих в него команд, которые VB выполняет автоматически.

Если требуется более глубокое вложение команд в систему меню, то аналогичным образом для любой команды в меню можно создать подменю раскрывающихся в ней команд, используя в процедуре создания новой команды в меню еще один сдвиг в списке команд нажатием в окне Menu Editor на кнопку «направо» (рис. 9.2).

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

Для того чтобы установить, окно какой формы должно появиться при запуске приложения (по умолчанию в VB установлено, что первым должно появиться окно формы Form1), необходимо, выполнив цепочку команд Project\Project Properties..., раскрыть в ее диалоговом окне список Startup Object: (рис. 9.2) и в нем выбрать ту форму, с которой должно начаться выполнение приложения.

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

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

Form2.Show

84

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

ShowOpen – открывает диалоговое окно загрузки файла с диска; ShowSave – открывает диалоговое окно сохранения файла на

диске;

ShowPrinter – открывает диалоговое окно установки режимов печати;

ShowFont – открывает диалоговое окно установки типа шрифта и некоторые другие.

Рис. 9.2. Диалоговое окно команды Project Options.

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

CommonDialog1.ShowSave

85

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

9.2.Задание для выполнения на компьютере

1.Создать проект приложения, состоящий из 3 форм: Form1,

Form2, Form3 и одного модуля Module1.

2.В окне первой формы Form1 создать головное меню, соответствующее представленному на рис. 9.1.

3.Создать на формах Form2 и Form3 командные кнопки «Выход» и написать для них тексты процедур, возвращающих приложение к окну формы Form1.

4.Создать текст процедур для команд из пункта головного меню «Файл» в соответствии с рекомендациями, изложенными в разделе

9.1.

5.Запустить приложение и проверить работу всех команд из пункта «Файл».

6.В окне программного кода модуля Module1 записать текст функции пользователя по условиям из табл. 7 (при записи функции использовать режим передачи аргумента функции по значению ByVal, см. раздел 7.1).

7.Создать для командной кнопки «Таблица функции» на форме Form1 процедуру, выводящую на форму таблицу из 20 значений функции в заданном интервале.

8.Создать текст процедуры для команды головного меню «Графики», которая переходит в окно формы Form2 и выводит в него график функции в том же интервале (см. раздел А4 в прил. А).

9.Проверить работу командной кнопки «Таблица функции» и команды головного меню «Графики».

10.Создать в модуле приложения Module1 главную процедуру (она должна иметь заголовок Sub Main) с программным кодом ввода

впамять значений элементов массива в соответствии с вариантом задания из табл. 7, и дальнейшего перехода в окно первой формы (массив нужно объявить в разделе General модуля Module1 с помощью оператора Global, для того, чтобы значения его элементов были доступны во всех процедурах приложения).

86

11.Создать процедуру для командной кнопки «Элементы массива», выводящей на форму Form1 таблицу элементов массива.

12.В окне команды Project Properties... (рис. 9.2) установить режим запуска приложения с выполнения главной процедуры – в спи-

ске Startup Object выбрать Sub Main.

13.Запустить приложение и проверить работу командной кнопки «Элементы массива».

14.Для пункта головного меню «Диаграммы» создать две команды: «Гистограмма» и «Круговая диаграмма» и записать для них тексты процедур, выводящих соответственно на форму Form2 столбчатую гистограмму, построенную на числовых значениях массива, а в окно формы Form3 – круговую диаграмму для числовых значений этого же массива (см. раздел А4 прил. А)

15.Запустить приложение и проверить работу всех его проце-

дур.

9.3.Контрольные вопросы

1.В чем проявляется эффективность создания головного меню приложения?

2.Структура редактора меню Menu Editor.

3.Как создать новый пункт в головном меню формы?

4.Как создать процедуру, выполняющую команду в головном

меню?

5.Как создать подменю команд?

7.Как задать для приложения, состоящего из нескольких форм, окно формы, которое должно появиться на экране после загрузки приложения в память?

8.Назначение главной процедуры Sub Main.

9.Назначение элемента управления CommonDialog.

10.Основные методы, используемые элементом управления

CommonDialog.

87

10. СОЗДАНИЕ И РЕДАКТИРОВАНИЕ МАКРОСОВ

10.1. Общие сведения

Разработка электронных документов обычно происходит на уровне встроенных команд той программы пакета Microsoft Office, в которой этот документ создается – Word, Excel, Access, PowerPoint и др. При этом многие практические задачи можно решать комплексно с использованием взаимодействия между отдельными программами пакета без программирования.

Однако наиболее важным преимуществом Microsoft Office является наличие внутреннего языка программирования и «общения» между офисными документами – VBA (Visual Basic for Applications),

ядром которого является язык VB. Благодаря этому появляется возможность управления ресурсами отдельных приложений Microsoft Office для решения комплексных задач автоматизации процессов документооборота с использованием систем управления базами данных и серверных служб на любом уровне сложности.

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

Наиболее простым уровнем управления электронным документом на языке VBA является создание программного кода в автоматическом режиме средствами самого приложения (Word, Excel, …), которое называется макропрограммированием, а сама такая программа называется макросом. Фактически макрос является новой командой, создаваемой пользователем, в которую включается последовательность выполняемых действий и команд, доступных в данном приложении.

Для создания макросов в различных приложениях Microsoft Office необходимо выполнить команду Запись макроса из пункта меню Сервис, при этом включается макрорекордер, который записывает последовательность действий в виде программы на VBA. Таким образом, создание макросов позволяет во многих случаях автоматизировать выполнение многократно повторяющихся громоздких действий и

88

существенно повысить производительность при создании деловых документов на профессиональном уровне.

Программы-макросы являются достаточно простыми программами, так как имеют линейную структуру и не допускают ветвлений, циклов, переходов и т. д. В последнем случае вместо записи макросов приходится создавать программный код на языке VBA «вручную».

Для наиболее простого случая создания в документе Word мак-

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

1.Выполнить команду включения макрорекордера – Сер-

вис\Макрос\Начать запись…

2.В диалоговом окне команды Запись макроса (рис. 10.1) задать соответствующее Имя макроса, выбрать режим доступности Макрос доступен для: и назначить команду для запуска Назначить макрос (обычно совокупность «горячих» клавиш).

Рис. 10.1. Диалоговое окно записи макроса в Word

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

89

4. Закончить запись макроса, нажав кнопку Остановить запись на панели Останов.

Необходимо отметить, что имя макроса должно состоять из одного слова (если оно не задано, то макросу автоматически присваивается стандартное имя с номером, например, Макрос5), а для «горячих» клавиш, кроме одной вспомогательной клавиши Alt или Ctrl, можно использовать сочетания из двух вспомогательных клавиш: Alt и Ctrl, Shift и Alt, Ctrl и Shift. При этом макрос будет запускаться каждый раз нажатием связанной с этой командой комбинацией «горячих» клавиш.

В частности, при разработке текстовых документов в редакторе Word удобно иметь макросы, которые производят переход к нижним индексам, верхним и нормальному шрифту, назначив для их выполнения соответственно «горячие» клавиши, например: Ctrl/d, Ctrl/u и Ctrl/n. Для записи каждого из таких макросов необходимо в отдельности последовательно выполнить действия, перечисленные выше, при этом в п. 3 выполнить последовательно цепочку команд: Формат/Шрифт…/ и затем выбрать соответственно – подстрочный, над-

строчный, нормальный шрифты.

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

Пример 10.1. Макрос, выполняющий следующее достаточно сложное форматирование шрифта текста (рис. 10.2): гарнитура – Impact; начертание – полужирный; размер – 48; подчеркивание – тол-

стой линией; цвет – синий; эффекты – с тенью, контур, малые прописные; интервал – разреженный, 1 пункт.

ФИРМА РАДУГА

Рис. 10.2. Фрагмент текста «Фирма РАДУГА» после обработки макросом

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

90

виями в пункте меню Формат/Шрифт… Затем этот макрос можно применять к любым выделяемым в тексте фрагментам, просто нажав назначенную данному макросу комбинацию клавиш.

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

Что касается самой процедуры создания макросов в Excel, то здесь фактически нет различий с процедурой создания макросов Word, кроме назначения комбинации «горячих» клавиш, в которой может использоваться только клавиша Ctrl.

Рис. 10.3. Диалоговое окно задания параметров макроса в Excel

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

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

91

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

пись.

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

Пример 10.2 Макрос в Excel, который будет создавать на листе рабочей книги бланк счет-фактуры с использованием фиксированных адресов ячеек (рис. 10.4).

Рис. 10.4. Бланк счет-фактуры, созданный макросом в Excel

92

Запись макроса надо начать с отключенным режимом Относительная ссылка. Далее следует произвести все необходимые действия по формированию бланка счет-фактуры, внешний вид которого представлен на рис. 10.4, после чего запись надо закончить. Теперь этот макрос можно использовать всякий раз, когда потребуется создать подобный бланк счет-фактуры.

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

Текст программ макросов, написанных на языке VBA в автоматическом режиме макрорекордером, хранится в специальном модуле, который входит в структуру того электронного документа, в котором должен быть доступен макрос, что определяется установками в начале процедуры записи макроса. Для того чтобы увидеть программу макроса в Word или Excel, необходимо вызвать редактор VBA, выполнив команду Сервис/Макрос/Редактор Visual Basic или просто нажав комбинацию «горячих» клавиш Alt/F11.

При вызове редактора VBA пользователь получает доступ к общей структуре электронного документа, которая представлена для документа Word (рис. 10.5) в виде иерархического дерева в окне Проект. Таким образом, текстовый документ всегда сопровождается управляющими структурами, которые представлены прежде всего в шаблоне, на основе которого был создан текстовый документ (по умолчанию используется общий шаблон Normal) с входящими в него модулями, содержащими тексты программ макросов, сохраненных в объекте NewMacros, а также вводимые пользователем общие процедуры и функции в объектах Модуль1,…. Сам текстовый документ входит в структуру Project и является объектом ThisDocument, а программы макросов, сохраненные в текстовом документе, содержатся в объектах Модуль1,… Кроме того, в проект документа Project могут входить диалоговые Формы – UserForm1,…, используемых для организации диалога и взаимодействия между различными объектами разработанного электронного документа и другие объекты (Ссылки,

Модуль класса и др.).

93

Рис. 10.5. Общий вид окна редактора VBA для документа Word

На рис. 10.5 в правой части редактора VBA представлена программа макроса с именем «НижнийИндекс», которая последовательно описывает все действия, произведенные пользователем при записи данного макроса. Макрорекордер как «программист» является большим «педантом» и всегда записывает в программный код все до мельчайших подробностей. Поэтому такой программный код, как правило, является избыточным и может быть, вообще говоря, существенно сокращен без видимого ущерба. Например, программа макроса «НижнийИндекс», которая начинается строкой с ключевым словом Sub и заканчивается строкой с ключевыми словами End Sub, будет выполняться, если ее представить в следующем «урезанном» до одной строки виде:

Sub НижнийИндекс()

Selection.Font.Subscript = True

End Sub

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

94

свойства Subscript шрифта Font для выбранного курсором места или выделенного фрагмента текста Selection в документе равным True.

В редакторе VBA можно изменить текст программы сложного макроса, приспособив его для решения требуемой задачи. Предположим, что нижние индексы, в которые переводит выделенный текст макрос «НижнийИндекс» должны быть размером не 10, а 12 пунктов. Для этого достаточно поменять в тексте программы макроса всего одну строку следующим образом:

.Size = 10 .Size = 12

Файлы электронных таблиц Excel также представляют собой некий VBA Project (рис. 10.6), который имеет схожую с документами Word структуру управления, состоящую из самой рабочей книги ThisWorkbook и ее листов Лист1,…, модулей – Module1,…, где записываются тексты программ для макросов, пользовательских процедур и функций, а также диалоговых форм – UserForm1,… и возможно других объектов.

Рис. 10.6. Общий вид окна редактора VBA для электронных таблиц Excel

95

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]