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

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

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

Совет
Используя графику в приложениях, необходимо сохранять чувство меры. Графика должна лишь дополнять и подчеркивать значимую информацию в формах приложения, но не загромождать формы и не отвлекать от их информационного содержания.
Для работы с графикой и изображениями в Visual Basic 6 используются графические объекты и графические методы. Существуют следующие возможности:

  • добавление и работа с изображением в форме;
  • использование элемента управления picture;
  • использование элемента управления image.

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


Кнопка

Название

Назначение

Line (Линия)

Создает в форме линию

Shape (Контур)

Создает в форме контуры

Frame (Рамка)

Размещает в форме рамку, позволяющую объединить объекты в группу



Элемент управления Line
Элемент управления Line — это линия, имеющая по умолчанию толщину 1. Для изменения вида линии используется свойство BorderStyle объекта Line. Оно может принимать следующие значения:

  • 0-Transparent — невидимая линия;
  • 1-Solid — сплошная линия;
  • 2-Dash — штриховая линия;
  • 3-Dot — пунктирная линия;
  • 4-Dash-Dot — штрихпунктирная линия;
  • 5-Dash-Dot-Dot — штрихпунктир с двойным штрихом;
  • 6-Inside Solid — непрерывная линия.

На  1 показаны типы линии в зависимости от значения свойства BorderStyle.
Толщину линии можно задать с помощью свойства Borderwidth. Цвет линии задается свойством BorderColor.
Замечание
Более подробно элемент управления Line был рассмотрен нами в главе 8.
Элемент управления Shape
Для создания рамок различной формы используется элемент управления Shape ( 2). Он является только графическим контейнером обведенных элементов управления, но не контейнером в настоящем смысле этого слова. При этом форма рамки задается свойством shape объекта shape и может быть следующей:

  • 0-RectangIe — прямоугольник;
  • 1-Square — квадрат;
  • 2-Oval — эллипс;
  • 3-Circle — круг;
  • 4-Rounded Rectangle — прямоугольник с закругленными углами;
  • 5-Rounded Square — квадрат с закругленными углами. При этом для элемента управления shape, как и для Line, можно установить тип линии рамки, ее толщину и цвет.

Замечание
Более подробно элемент управления shape был рассмотрен нами в главе 8.
Элемент управления Frame
Элемент управления Frame имеет вид рамки с заголовком ( 3). Заголовок, размещаемый в рамке, задается свойством caption. Если вы не хотите, чтобы объект Frame содержал заголовок, установите для значения этого свойства пустую строку.
Объект Frame является полноценным контейнером и управляет общими свойствами объектов, помещенных в рамку. Если, например, сделать Frame невидимым, присвоив свойству visible значение False, то все объекты в рамке тоже станут невидимыми. Используя это свойство объекта Frame, и учитывая, что оно переопределяется и в режиме выполнения приложения, можно организовать, например, многостраничный ввод данных.
Свойство BorderStyle элемента управления Frame задает тип линии рамки и принимает одно из следующих значений:

  • 0-None — без рамки;
  • 1-Fixed Single — сплошная тонкая линия.

При установке для свойства BorderStyle значения 0-None рамка будет отсутствовать, а соответственно, не будет и заголовка рамки.
Объекту Frame можно придать объемный вид, установив для свойства Appearance значение 1-3D. Если установить значение 0-Flat, то объект принимает плоский вид ( 3).
Для объекта Frame можно установить разные цвета для фона и заголовка рамки, используя свойства BackColor и ForeColor, соответственно.
Замечание
Более подробно элемент управления Frame был рассмотрен нами в главе 8.
Свойство Picture
Чтобы разместить в форме графическое изображение, не обязательно выбирать графические объекты. Можно просто воспользоваться свойством picture формы. Для вставки графического изображения в форму необходимо нажать
кнопку с тремя точками в свойстве picture, а затем в открывшемся диалоговом окне Load Picture (Загрузить изображение) ( 4) выбрать файл требуемого изображения.
Данное свойство формы используют для размещения фонового изображения. При этом необходимо учесть, что размер формы должен соответствовать размеру исходного изображения. Если изображение меньше формы, то оно размещается в левом верхнем углу формы и в дальнейшем не перемещается. Поэтому такой способ хотя и прост, но очень неудобен.
Свойство picture доступно и в режиме выполнения приложения. Простым присвоением можно заменить или убрать изображение из формы.
Объекты для работы с изображениями
Для размещения в форме графических изображений используются объекты image и picture. Им соответствуют следующие значки на панели элементов управления:


Значок

Название

Создаваемый объект

Image

Image

PictureBox

Picture



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


Описание файла

Тип файла (расширение)

Битовый растровый файл

bmp

Независимый растровый файл

dib

Файл значка

ico,cur

Метафайл

wmf

Расширенный метафайл

emf

Растровый файл

gif

Растровый сжатый файл

jpg, Jpeg



 
Изображение размещается в объекте image так же, как объект в форме, то есть при помощи свойства picture. Однако в отличие от размещения изображения непосредственно в форме, изображение в объекте image пропорционально изменяет свои размеры.
Изменением размера управляет свойство Stretch. Если это свойство имеет значение False, то объект image принимает размеры в соответствии с размером изображения. Если значение равно True, то размеры изображения изменяются в соответствии с размерами объекта.
В отличие от image, элемент управления picture может работать как полноценный контейнер. Он может содержать другие элементы управления, в нем можно рисовать, используя графические методы Line, circle, point, pset, или выводить текст, используя метод print.
Элемент управления picture обладает свойством visible. При этом все изображения, помещенные в picture, становятся видимыми или невидимыми в зависимости от установленного значения этого свойства. При помощи объекта picture можно организовать простую анимацию, используя метод PaintPicture.
Изображение в элемент управления picture загружается полностью. При этом если оно больше размеров picture, то видна только часть изображения, если меньше, — то изображение размещается в левом верхнем углу. Если установить для свойства AutoSize объекта picture значение True, то изображение будет пропорционально вписываться в объект picture.
Задание изображений
Как уже говорилось, определить графическое изображение в приложении можно как в режиме проектирования (режим Design Time), так и в режиме выполнения (режим Run Time).
Чтобы задать графическое изображение в режиме проектирования, используется свойство picture объекта. Для этого необходимо выполнить следующие действия:
1. Открыть окно Properties объекта.
2. Выбрать свойство picture.
3. Нажать кнопку с тремя точками в правом столбце свойства.
4. В открывшемся диалоговом окне Load Picture найти требуемый файл.
5. Дважды щелкнуть на файле мышью или установить на него курсор и нажать кнопку Открыть.
В режиме выполнения программы существует больше возможностей для определения изображения объекта. Изображение можно задать следующими способами:

  • загрузить изображение при помощи функции Loadpicture с указанием файла изображения. При этом изображение помещается в свойство picture объекта. Например, Object.Picture = LoadPicture("С:\...\Картинка.Ьтр)
  • загрузить изображение из ресурсного файла приложения при помощи функции LoadRespicture с указанием идентификатора ресурса и его типа: Set Object.Picture = LoadResPicture(Resident, vbResBitMap)
  • скопировать изображение из одного объекта в другой с помощью обычного присвоения: ObjectTo.Picture = ObjectFrom.Picture.
  • Скопировать изображение из объекта clipboard.

Удаление изображений
Удаляется изображение из объекта очень просто. Для этого необходимо воспользоваться загрузкой в свойство Picture пустого значения:
Set Объект.Picture = LoadPicture("")
При этом изображение удаляется из объекта.
Графические методы
В дополнение к графическим элементам управления в Visual Basic 6 существует набор графических методов:


Метод

Назначение

Circle

Рисует окружность, дугу или эллипс

CIs

Очищает область вывода

Line

Рисует линии

PaintPicture

Рисует (загружает) изображение

Point

Возвращает цвет точки

Print

Выводит текст

Pset

Размещает точку



 
Замечание
Необходимо отметить, что метод Print предназначен для вывода текста и к графике имеет косвенное отношение. Тем не менее, мы рассмотрим его вместе с графическими методами, поскольку он используется совместно с другими методами графики для "рисования" текста в указанном объекте или совмещения текста и чистой графики.
В графических методах используются функции вычисления цвета RGB и QBColor. Рассмотрим сначала эти функции.
 
Функции цвета
Функция RGB возвращает числовое представление цвета (тип возвращаемого значения при этом long) в соответствии с интенсивностью трех цветовых составляющих: R (Red— красный), G (Green — зеленый) и В (Blue — синий). Интенсивность этих трех основных цветов задается шкалой чисел от О до 255. Синтаксис этой функции такой:
RGB (Red, Green, Blue)
где:

  • Red — интенсивность красного цвета от 0 до 255;
  • Green — интенсивность зеленого цвета от 0 до 255;
  • Blue — интенсивность синего цвета от 0 до 255.

Для примера в табл. 11.2 показаны часто используемые цвета, разложенные по интенсивностям RGB-цветов.
Таблица 11.2. Цвета в RGB-представлении


Цвет

Интенсивность красного

Интенсивность зеленого

Интенсивность синего

Черный

0

0

0

Белый

255

255

255

Красный

255

0

0

Зеленый

0

255

0

Синий

0

0

255

Бирюзовый

0

255

255

Пурпурный

255

0

255

Желтый

255

255

0

Серый

192

192

192





Например, если вы хотите сделать фон формы бирюзовым, необходимо присвоить свойству BackColor формы следующее значение:
Form.BackColor = RGB (0,255,255)
Для удобства работы со стандартными цветами используется функция QBColor, которая возвращает числовое представление одного из 16 цветов, показанных в табл. 11.3.
Таблица 11.3. Цвета, возвращаемые функцией QBColor


Номер цвета

Цвет

0

Черный

1

Синий

2

Зеленый

3

Бирюзовый

4

Красный

5

Пурпурный

6

Желтый

7

Белый

8

Серый

9

Светло-синий (голубой)

10

Светло-зеленый (салатный)

11

Светло-бирюзовый

12

Светло-красный (алый)

13

Светло-пурпурный

14

Светло-желтый

15

Ярко-белый





Синтаксис этой функции выглядит очень просто:
QBColor (NumberColor)
где NumberColor — числовое значение (номер цвета), определяющее цвет (табл. 11.3).
Для того чтобы установить для формы бирюзовый цвет фона, достаточно написать следующий код:
Form.BackColor = QBColor(3)
Метод Circle
Метод circle используется следующим образом:
object.Circle [Step] (x, у), radius, [color, start, end, aspect]
где:

  • object — объект, в котором применяется метод. Если объект не указан, то по умолчанию используется форма;
  • step — ключ, определяющий привязку центра окружности, дуги или эллипса к координатам, возвращаемым свойствами currentx и currentY объекта;
  • х, у — числа, определяющие координаты центра окружности, дуги или эллипса в единицах свойства scaleMode объекта;
  • radius — число, определяющее радиус окружности, дуги или эллипса в единицах свойства ScaleMode объекта;
  • color — значение типа Long, задающее цвет линии. Если параметр не указан, применяется значение свойства ForeColor. Для задания цвета можно использовать функции RGB () или QBColor;
  • start, end — при рисовании дуги или части эллипса задает позицию начала и конца дуги в радианах: от 2 пи до -2 пи радиан;
  • aspect — задает коэффициент "эллиптичности" окружности. По умолчанию этот коэффициент равен 1.0, что соответствует окружности.

Метод Сls
С помощью метода Cls можно очистить форму или объект picture от текста и графики, созданных в нем программно. Синтаксис метода cis очень простой и выглядит так:
object.Cls
где object — объект, в котором применяется метод. Если параметр не указан, то по умолчанию используется форма.
Замечание
Необходимо помнить, что при применении этого метода свойства CurrentX и CurrentY выбранного объекта устанавливаются в 0.
 
Метод Line
Метод Line предназначен для рисования линий и имеет следующий синтаксис:
object.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B] [F]
где:

  • object — объект, в котором применяется метод. Если объект не указан, то по умолчанию используется форма;
  • step — ключ, определяющий привязку начала линии к координатам, возвращаемым свойствами CurrentX и CurrentY объекта;
  • x1, y1 — координаты начала линии. При отсутствии этих параметров начало привязывается к значениям свойств CurrentX и CurrentY объекта;
  • step — ключ, определяющий привязку координат конца линии к началу, то есть координаты конца заданы относительно координат начала линии;
  • x2, y2 — координаты конца линии;
  • color — задает цвет линии в палитре RGB. Если параметр не указан, то используется свойство ForeColor объекта;
  • в — задает рисование прямоугольника, при этом координаты означают координаты левого верхнего и правого нижнего углов;
  • F— задает заполнение прямоугольника цветом линии рисования.

Метод PamtPicture
Метод paintpicture рисует (загружает) содержимое графических файлов имеющих расширение bmp, wmf, emf, cur, ico или dib, в формах или объектах типа picture. Метод имеет следующий синтаксис:
object.PaintPicture picture, xl, yl, width1, height1, x2, y2, width2, height2, opcode
где:

  • object — объект, в котором применяется метод. Если объект не указан, то по умолчанию используется форма;
  • picture — исходное изображение, которое будет размещено в объекте. Это должна быть ссылка на свойство picture данного или другого объекта;
  • xl, yl — координаты левого верхнего угла области объекта для размещения исходного изображения;
  • widthi, heightl— размер (ширина-и высота) области размещения исходного изображения.. Если размер области отличается от размера исходного изображения, то изображение пропорционально растягивается или сжимается;
  • х2, y2 — координаты левого верхнего угла в исходном изображении для вставки в объект. Если заданы координаты, отличные от нуля, то будет вставлена часть исходного изображения;
  • width2, height2 — размер (ширина и высота) вставляемой части исходного изображения;
  • opcode — устанавливает режим вставки изображения при помощи констант из набора RasterOp (табл. 11.4). Задается только для работы с изображениями, имеющими расширение bmp.

Для работы метода с изображениями, имеющими расширение BMP, необходимо использовать константы из набора RasterOp для установки режима вставки изображения. Эти константы описаны в табл. 11.4.

При помощи отрицательных значений ширины (widthi) и высоты (heightl) можно перевернуть изображение вертикально или горизонтально.
Таблица 11.4. Набор констант RasterOp для метода PaintPicture


Константа

Значение

Описание

vbDstInvert

&H00550009

Инвертирует указанное изображение

vbMergeCopy

&HOOCOOOCA

Объединяет рисунок и изображение-источник

vbMe где Paint

&HOOBB0226

Объединяет инвертированное изображение источника с указанным изображением, используя оператор Or

vbNotSrcCopy

&H00330008

Копирует инвертированное изображение-источник в указанное изображение

vbNotSrcEraae

&H001100A6

Инвертирует результат объединения указанного изображения и изображения-источника, используя оператор Or

vbPatCopy

&HOOF00021L

Копирует рисунок в указанное изображение

vbPatInvert

&H005A0049L

Объединяет указанное изображение с рисунком, используя оператор Xог

vbPatPaint

&HOOFBOA09L

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

vbSrcAnd

&H008800C6

Объединяет пикселы указанного изображения источника, используя оператор And

vbSrcCopy

&HOOCC0020

Копирует изображение-источник в указанное изображение

vbSrcErase

&H00440328

Инвертирует указанное изображение и объединяет результат с изображением-источником с помощью оператора And

vbSrcInvert

&H00660046

Объединяет пикселы указанного изображения и изображения-источника, используя оператор Хог

vbSrcPaint

&HOOEE0086

Объединяет пикселы указанного изображения и изображения-источника с помощью оператора Or



Метод Point
Метод point возвращает цвет в палитре RGB указанной точки в форме или на объектах типа pictureBox. Синтаксис этого метода следующий:
object.Point (x, у)
где:

  • object — объект, в котором используется метод;
  • x, у — координаты точки в объекте.

Замечание
Необходимо иметь в виду, что в случае "выпадения" точки из границ формы или объекта Picture (то есть когда координаты больше размера объекта) метод возвращает отрицательное значение -1.
 
Метод Print
Метод print выводит (печатает) текст в указанный объект или окно Immediate. Синтаксис этого метода следующий:
object.Print [outputList]
где:

  • object — объект, в котором используется метод. Если объект не указан, то по умолчанию используется форма;
  • outputList — строковое выражение или список выражений, выводимых в объекте.

Список вывода outputList имеет определенный синтаксис. Этот список задается следующим образом:
(Spc(n) I Tab(n)} expression charpos
где:

  • spc(n) — вставляет в выводимый текст количество пробелов, задаваемое числом п,
  • Tab(n) — задает позицию точки начала вставки;
  • expression — числовое или строковое выражение для вывода;
  • charpos — задает позицию вставки.

Итак, при использовании синтаксиса метода print не указываются шрифт, его цвет, координаты вывода текста. Эти параметры вывода текста определяются следующими свойствами объекта, в который выводится текст:

  • currentx — координата начала текста по горизонтальной оси;
  • CurrentY — координата начала текста по вертикальной оси;
  • Font — шрифт и размер выводимого текста;
  • FontTransparent — прозрачность текста, то есть свойство, при котором сквозь текст виден фон объекта;
  • ForeColor — цвет.

Метод Pset
Метод Pset назначает цвет указанной точки объекта. Этот метод является обратным методу point. Синтаксис этого метода следующий:
object.Pset [Step] (x, у), [color]
где:

  • object — объект, в котором используется метод. Если объект не указан, то по умолчанию используется форма;
  • Step — ключ, определяющий привязку координат точки к координатам, возвращаемым свойствами Currentx и currentY объекта;
  • х, у — координаты точки на объекте;
  • color — цвет точки в палитре RGB. Если параметр не указан, то используется свойство Forecoior объекта.

При использовании метода pset необходимо иметь в виду, что размер точки определяется толщиной объекта, то есть свойством объекта DrawWidth. Для толщины 1 это один пиксел, для толщины больше единицы — это область объекта с центром, имеющим указанные координаты. Способ рисования точки при этом определяется свойствами объекта DrawMode и DrowStyle.
 
Работа со шрифтами
Шрифт, используемый в объекте, определяется свойством объекта Font. В свою очередь, свойство Font также является объектом со своим набором свойств. Диалоговое окно назначения этих свойства показано на  5.
В диалоговом окне Font (Шрифт) можно назначить следующие свойства шрифта:

  • Bold — назначает полужирный шрифт (bold);
  • italic — устанавливает курсив (italic);
  • Strikethrough — применяет эффект перечеркивания (strikcthrough);
  • underline — устанавливает подчеркивание (underline);
  • Name — выбирает наименование шрифта (строковый идентификатор шрифта, например Arial);
  • size — назначает размер шрифта.

Для установки наименования шрифта используется список Шрифт диалогового окна. Чтобы установить начертание (полужирный, курсив, обычный), используется список Начертание. Размер шрифта можно установить в поле Размер вручную или выбрать значение из списка размеров. Для установки атрибутов зачеркнутый и подчеркнутый, необходимо использовать флажки Зачеркнутый и Подчеркнутый. Таблица кодировки набора символов назначается в раскрывающемся списке Набор символов.
 
Управление цветом
Управление цветом формы и элементов управления можно организовать, используя свойства ForeColor и BackColor. Свойство ForeCoior задает цвет текста, а BackColor устанавливает цвет фона.
В режиме проектирования приложения эти свойства можно установить в окне Properties (Свойства) объекта ( 6), вызвав диалоговое окно настройки цвета. Для этого необходимо выделить настраиваемое свойство и нажать на кнопку со стрелкой в правом столбце свойства. Как видно из рисунка, это диалоговое окно состоит из двух вкладок: Palette (Палитра) и System (Системные). На вкладке Palette можно установить произвольные цвета из палитры, на вкладке System можно выбрать цвет из списка цветовой схемы Windows, которая устанавливается в панели управления Windows вызовом окна настройки Свойства: Display. При использовании цветовой схемы необходимо иметь в виду, что при изменении настройки цветовой схемы Windows соответственно изменятся и цвета приложения.
В режиме выполнения приложения свойства ForeColor и BackColor можно установить простым присвоением, используя функции цвета или встроенные константы Visual Basic 6, представленные в табл. 11.5.
Таблица 11.5. Набор констант Visual Basic 6 для управления цветом


Константа

Значение

Описание цвета

vbBlack

&HO

Черный

vbRed

&HFF

Красный

vbGreen

&HFFOO

Зеленый

vbYellow

&HFFFF

Желтый

vbBlue

&HFFOOOO

Голубой

vbMagenta

&HFFOOFF

Пурпурный

vbCyan

&HFFFFOO

Бирюзовый

vbWhite

&HFFFFFF

Белый



Анимационная графика
Анимационную графику будем рассматривать как средство для внесения разнообразия и привлекательности в пользовательский интерфейс. Примером такой анимации может служить процесс копирования файлов в системе Windows, когда на экране отображается живая картинка переноса листов из папки в папку. Не занимая больших ресурсов, анимация в таком исполнении делает интерфейс приложения более привлекательным, а в конечном итоге более конкурентоспособным и само приложение.
В этом разделе мы рассмотрим некоторые варианты простой анимации, а именно, смену и перемещение изображений. В примерах приложений используется массив элементов управления, поэтому предварительно изучим, что представляет собой такой массив, и как его создать при проектировании приложения.
Массив элементов управления
Массив элементов управления представляет собой группу элементов управления одного типа, которые идентифицируются по одному и тому же имени и индексу. Индекс действует аналогично обычному массиву, как, например, в массиве чисел. Каждый из элементов массива характеризуется свойством Name, имеющим одно и то же значение для всех элементов. Все они относятся к одному типу. Идентифицируются элементы такого массива с помощью свойства index.
Массив элементов управления создается при проектировании приложения. Для создания массива существуют следующие основные способы:

  • созданный элемент управления дублируется при помощи команд Copy (Копировать) и Paste (Вставить) меню Edit (Правка);
  • создаются элементы управления одного типа по отдельности, а затем им присваивается одно и то же имя в свойстве Name и соответствующее значение индекса в свойстве index.

Замечание
В обоих случаях свойство index поддерживается автоматически при положительном ответе на вопрос о добавлении элемента управления в массив.
 
Переключение изображений
Самый простой способ анимации — переключение изображений. Рассмотрим это на примере. Создайте небольшое приложение, выполнив следующие действия:
1. Создайте новый стандартный проект. С этой целью выберите команду New Project (Создать новый проект) в меню File (Файл) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.
2. Присвойте проекту имя MyGraphics. Для этого откройте окно свойств проекта, выбрав команду Projecti Properties (Свойства Project1) меню Project (Проект). После переименования проекта эта команда будет называться MyGraphics Properties.
3. Присвойте форме проекта имя FormForGraphics. В свойство caption формы введите заголовок Форма для работы с графикой.
4. Добавьте в форму кнопку управления типа commandBution, дважды щелкнув мышью кнопку CommandButton на панели элементов управления. Назовите эту кнопку cbcontrol и присвойте свойству Caption значение Изменить состояние. Созданная в форме кнопка cbcontrol будет служить для переключения изображений, выполняемых приложением MyGraphics по событию click этой кнопки.
5. Добавьте в форму три элемента управления типа picture и назовите их picRed, picYellow и picGreen. Вставьте В СВОЙСТВО Picture каждого объекта соответствующие цветам изображения светофора из каталога \Common\Graphics\Icons\Trafric. Свойство visible для всех трех элементов управления установите в состояние False.
6. Добавьте в форму объект типа image, в котором будет переключаться изображение, и назовите его imgStatus, при этом свойство picture этого объекта оставьте пустым. Свойство visible для данного элемента управления установите в состояние True.
После выполнения приведенных выше шагов форма приложения будет иметь вид, показанный на  7.
7. Откроите окно редактора и задайте следующий код:
Dim fIgEnd As Integer
Private Sub Form_Load()
fIgEnd = 0
imgStatus.Picture = picRed.Picture
FormForGraphics-Caption = "Светофор"
End Sub
Private Sub cbControl_Click ()
If imgStatus.Picture = picRed.Picture Then
imgStatus.Picture = picYellow.Picture
Elself imgStatus.Picture = picYellow.Picture Then
imgStatus.Picture = picGreen.Picture
Else
imgStatus.Picture = picGreen.Picture
fIgEnd = 1
End If
If imgStatus.Picture = picGreen.Picture And fIgEnd = 1 Then
imgStatus.Picture = picRed.Picture
fIgEnd = 0
End If
End Sub
8. Запустите приложение на выполнение. Нажатием кнопки Изменить состояние осуществляется последовательное переключение состояния светофора с помощью присвоения свойству picture объекта imgStatus нового значения.
В этом приложении показана возможность переключения изображений из набора отдельных объектов, в которых эти изображения содержатся. Однако для хранения необходимых изображений предпочтительнее использовать массивы элементов управления или объекта imageList.
Перемещение и переключение изображений
Перемещая и переключая изображения, можно организовать несложную анимацию. Чаще всего этот способ используется для анимации процессов ожидания или расчета, "оживления" изображений в формах приложения.
Для изучения перемещения и переключения изображений создадим небольшой проект MyGraphicsDay. Выполните следующие действия:
1. Создайте новый стандартный проект. Для этого в меню File (Файл) выберите команду New Project (Создать новый проект) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.
2. Присвойте проекту имя MyGraphicsDay. Откройте окно свойств проекта, выбрав команду Project1 Properties (Свойства Project 1) меню Project (Проект). После переименования проекта эта команда будет называться MyGraphicsDay Properties.
3. Присвойте форме проекта имя FormForGraphics. В свойство caption формы введите заголовок Форма для работы с графикой.
4. Добавьте в форму кнопку управления типа commandButton, дважды щелкнув мышью кнопку ComniandBiitton на панели элементов управления. Назовите эту кнопку cbRun и присвойте свойству Caption значение Старт. Созданная в форме кнопка cbRun будет служить для запуска действий, выполняемых приложением MyGraphicsDay по событию click этой кнопки.
5. Добавьте в форму FomForGraphics еще одну такую же кнопку и назовите ее cbStop. Присвойте свойству caption значение Стоп. Эта кнопка будет служить для останова анимации и возврата приложения в исходное состояние.
6. При анимации, даже самой простой, требуется организовать изменение объектов во времени. Для задания отсчета интервалов времени служит объект типа таймер Timer. Добавьте его в форму с помощью кнопки
Timer на панели элементов управления. Этот объект будет вырабатывать управляющие сообщения для анимации. Используя свойство Name, присвойте таймеру имя tmrGraphicsTimer. При запуске приложения таймер невидим, поэтому о свойстве visible для этого объекта можно не задумываться. Свойство таймера Enabled установите в состояние False, а свойству interval присвойте значение 200.
Замечание
Более подробную информацию об объекте Timer вы можете найти в главе 8. Здесь лишь кратко напомним следующее. Таймер отсчитывает интервалы времени в миллисекундах, отрабатывая событие Timer. При этом минимальный интервал отсчета времени составляет 1, а максимальный — 65 535 миллисекунд, то есть максимально таймер может работать с интервалом чуть больше 1 минуты. Основные свойства объекта Timer — interval и Enabled. Свойство Interval определяет интервал отработки события Timer, свойство Enabled запускает или останавливает таймер. Если Enabled установлено в состояние True, таймер начинает отрабатывать событие Timer, если в состояние False — таймер находится в состоянии ожидания. При этом таймер с установленным при проектировании свойством Enabled в состояние True запускается сразу же после загрузки формы, в которой он находится.
7. Добавьте в форму элемент управления image. Назовите его imgSunMoon.
8. Добавьте в форму массив элементов управления типа Picture, состоящий из двух элементов. Для создания массива воспользуйтесь любым удобным для вас способом. Например, разместите в форме объект picture, дважды щелкнув мышью кнопку PictureBox на панели элементов управления. Затем скопируйте объект и вставьте его копию в форму. Объектам массива присвойте имя picSunMoon. В элемент массива, индекс которого равен 0 (свойство index), введите изображение солнца. В элемент массива, индекс которого равен 1, введите изображение месяца. Свойство visible для элементов массива установите в состояние False.
Полученное приложение показано на  8.
9. Откройте окно редактора и разместите в нем указанный ниже код:
Dim xAdd As Integer
Dim yAdd As Integer
Dim figSunMoon As Integer
Private Sub Form Load()
' "Смена дня и ночи"
xAdd = 100
yAdd = -100
figSunMoon = 1
xScaleSunMoon = ImgSunMoon.Width
FormForGraphics.Caption = "Смена дня и ночи"
End Sub
Private Sub cbRun_Click()
tmrGraphicsTimer.Enabled = True
xAdd = 100
yAdd = -100
figSunMoon = 1
ImgSunMoon.Picture = PicSunMoon(0).Picture
End Sub
Private Sub cbStop_Click()
tmrGraphicsTimer.Enabled = False
ImgSunMoon.Left = xScaleSunMoon / 2
ImgSunMoon.Top = FormForGraphics.ScaleHeight — 500
ImgSunMoon.Picture = PicSunMoon(0).Picture
End Sub
Private Sub tmrGraphicsTimer Timer()
ImgSunMoon.Left = ImgSunMoon.Left + xAdd
ImgSunMoon.Top = ImgSunMoon.Top + yAdd
If ImgSunMoon.Left > FormForGraphics.ScaleWidth / 2 — xScaleSunMoon / 2 And figSunMoon = 1 Then
yAdd = 100
End If
If ImgSunMoon.Left < FormForGraphics.ScaleWidth / 2 -xScaleSunMoon / 2 And figSunMoon = 0 Then
yAdd = 100
End If
If ImgSunMoon.Left > FormForGraphics.ScaleWidth Then
yAdd = -100
xAdd = -100
figSunMoon = 0
ImgSunMoon.Picture = PicSunMoon(1).Picture
ImgSunMoon.Left = FormForGraphics.ScaleWidth — 500
ImgSunMoon.Top = FormForGraphics.ScaleHeight — 500
End If
If ImgSunMoon.Left < xScaleSunMoon / 2 And figSunMoon = 0 Then
ImgSunMoon.Left = xScaleSunMoon / 2
ImgSunMoon.Top = FormForGraphics.ScaleHeight — 500
tmrGraphicsTimer.Enabled = False
End If
End Sub
10. Запустите приложение на выполнение. При нажатии кнопки Старт объект, напоминающий солнце, перемещается по форме и при достижении правого нижнего угла меняет изображение, после чего возвращается в исходную точку ( 9). Нажатие кнопки Стоп переводит приложение в исходное состояние.
Совмещение изображения и текста
Иногда возникает необходимость совместить текст и изображение в объектах приложения. Для этого используется метод print, позволяющий выводить текст на объекте. Рассмотрим, как этот метод применяется на практике. Для создания приложения выполните следующие действия:
1. Создайте новый стандартный проект. Для этого в меню File (Файл) выберите команду New Project (Создать новый проект) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.
2. Присвойте проекту имя MyGraphObjects. Для этого откройте окно свойств проекта, выбрав команду Projecti Properties (Свойства Project I) из меню Project (Проект). После переименования проекта эта команда будет выглядеть как MyGraphObjects Properties.
3. Присвойте форме проекта имя FormForGraphics. В свойство caption формы введите заголовок Графические формы и методы.
4. Добавьте в форму кнопку управления типа conmandButton, дважды щелкнув мышью кнопку CommandButton ДЦ на панели элементов управления. Назовите эту кнопку cbstart и присвойте свойству caption значение Выполнить. Созданная в форме кнопка cbstart будет служить для отображения текста на графическом объекте по событию click этой кнопки.
5. Переименуйте форму проекта Formi в FormForGraphics и в свойство Caption введите заголовок окна Графические формы и методы.
6. Добавьте в форму элемент управления типа picture, дважды щелкнув мышью кнопку PictureBox на панели элементов управления. Назовите этот объект picpicture. В свойство picture объекта вставьте графическое изображение светофора из каталога \Common\Graphics\Icons\Traffic.
7. Введите в окно редактора небольшой код, указанный ниже:
Private Sub cbStart_Click()
picPicture.Print "Светофор" End Sub
8. Запустите приложение на выполнение. Нажмите кнопку Выполнить. На изображении появится надпись "Светофор" ( 10).
Можно поместить надпись под рисунком, указав координаты точки начала надписи на изображении ( 11). В этом случае введите в окно редактора следующий код:
Private Sub cbStart_Click()
picPicture.CurrentX = 100
picPicture.CurrentY = 400
picPicture.Print "Светофор"
End Sub
Элемент управления Animation
Элемент управления Animation позволяет использовать при анимации видеофайлы — специально подготовленные файлы с расширением avi, представляющие собой последовательный набор кадров (растровых изображений).
Для использования элемента управления Animation необходимо подключить к проекту библиотеку Microsoft Windows Common Control-2 6.0. После подключения этой библиотеки кпроекту на панели элементов управления появляется кнопка Animation. Вид элемента управления Animation, размещенного в форме, показан на  12.
Замечание
Следует еще раз обратить внимание на то, что для применения элемента управления Animation требуется видеофайл. В своем примере мы воспользуемся видеофайлом из каталога \Common\Graphics\Videos.
Основные методы элемента управления Animation, которые позволяют организовать просмотр видеофайлов, следующие:


Метод

Назначение

Open

Открывает видеофайл

Play

Запускает видеофайл на выполнение

Stop

Останавливает видеофайл

Close

Закрывает видеофайл



 
Метод play может иметь дополнительные аргументы:

  • Repeat — задает количество повторов просмотра видеофайла
  • Start — задает начальный кадр
  • Stop — задает последний кадр

Для изучения элемента управления Animation создадим приложение MyVideoAnimation. Выполните следующие действия:
1. Создайте новый стандартный проект. Выберите команду New Project (Создать новый проект) меню File (Файл) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.
2. Присвойте проекту имя MyVideoAnimation. Для этого откроите окно свойств проекта, выбрав команду Project1 Properties (Свойства Project 1) меню Project (Проект). После переименования проекта эта команда будет именоваться MyVideoAnimation Properties.
3. Присвойте форме проекта имя FormVideoAnimation. В свойство Caption формы введите заголовок Просмотр видеофайлов.
4. Подключите к проекту две библиотеки: Microsoft Common Dialog Control 6.0 и Microsoft Windows Common Control-2 6.0. Для этого в меню Project (Проект) выберите команду Components (Компоненты) и в открывшемся диалоговом окне установите соответствующие именам библиотек флажки.
Замечание
Библиотеку Microsoft Common Dialog Control 6.0 подключаем для создания в форме диалогового окна поиска видеофайлов на диске.
5. Добавьте в форму кнопку управления типа CommandButton, дважды щелкнув мышью кнопку CommandButton на панели элементов управления. Назовите эту кнопку cbRun и присвойте свойству caption значение Просмотр видеофайла. Созданная в форме кнопка cbRun предназначена для запуска видеофайла на просмотр по событию click этой кнопки.
6. Добавьте в форму FormForGraphics еще одну такую же кнопку и назовите ее cbStop. Присвойте свойству Caption значение Стоп. Эта кнопка будет служить для останова просмотра видеофайла.
7. Добавьте в форму элемент управления Animation, дважды щелкнув мышью кнопку Animation на панели элементов управления. Назовите его
anivideo.
8. Добавьте в форму элемент управления CommonDialog, дважды щелкнув мышью кнопку Common Dialog на панели элементов управления. Назовите созданный объект cdvideo. Вид созданного проекта показан на  13.
9. Откройте окно редактора и введите следующий код:
Private Sub cbRun_Click()
cdvideo.Filter = "avi files (*.avi)¦*.avi"
cdVideo.ShowOpen
anivideo.Open cdVideo.FileName
anivideo.Play
End Sub
Private Sub cbStop_Click()
anivideo.Stop
End Sub
Private Sub Form Unload(Cancel As Integer)
anivideo.Close
End Sub
10. Запустите приложение на выполнение. При нажатии кнопки Просмотр видеофайла открывается диалоговое окно Открытие файла, позволяющее найти видеофайл. Найдите требуемый файл и нажмите кнопку Открыть. Видеофайл запускается на просмотр ( 14). Остановить просмотр можно нажатием кнопки Стоп.
Замечание
Для диалогового окна Открытие файла установлено свойство Filter, чтобы осуществить фильтрацию файлов с расширением avi.
Если метод play в этом примере использовать в следующем виде:

aniVideo.Play 3, 5, 10 то три раза будут прокручены кадры с 5 по 10.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика