Создание приложений ОС Windows средствами Visual Basic

       

Приложение «Paint»


В этом приложении рассматриваются способы рисования в форме и способы работы с меню. Внешний вид приложения показан на рис. 26.

Создайте новый проект, сохраните его как Paint1.vbp, а форму как Paint1.frm. В свойствах формы измените Caption на “Paint”, а в BackColor установите белый цвет.

Запустите редактор меню(Menu Editor, расположен в верхней панели инструментов, третий слева).

В поле Caption наберите «&Выход», в поле Name – «mnuExit». Нажмите кнопку Next. В списке снизу окна должна появится запись «&Выход». Знак амперсанда ставится перед тем символом, который будет выделен подчёркиванием, т.е. этот пункт меню может быть выбран при нажатии кнопки Alt и кнопки соответствующей подчёркнутой букве.

Теперь в поле Caption введите «&Да», в поле Name–«mnuExitYes». Для того чтобы получить вложенное меню, нажмите кнопку со стрелкой вправо, соответствующая строка в списке должна сместиться вправо. Нажмите кнопку Next. Введите команду меню «&Нет» с именем «mnuExitNo».

Введите команду меню «&Цвет» с именем «mnuColor». Это меню не должно быть вложенным в меню «Выход», поэтому нажмите кнопку со стрелкой влево. Введите в этом меню следующие вложенные команды: «&Красный» (mnuRed), «&Синий» (mnuBlue), «&Черный».

Для команды меню «&Черный», установите флажок Checked. Этот флажок обозначает будет ли данная команда меню «отмечена», т.е. будет ли возле неё стоять «галочка». В редакторе меню мы устанавливаем изначальное значение состояния меню, то которое будет при запуске. А при запуске активным устанавливается именно чёрный цвет.

Наберите в редакторе кода следующий код:

Option Explicit

Dim Button As Integer

Dim Shift As Integer

Dim x As Single

Dim Y As Single



Dim col As Integer

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

Paint1.CurrentX = x

Paint1.CurrentY = Y

End Sub

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

If Button = 1 Then


Line (Paint1.CurrentX, Paint1.CurrentY)-(x, Y), QBColor(col)

End If

End Sub

В первом участке кода объявляются необходимые переменные, такие как координаты x и y, цвет col, и другие служебные переменные.

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

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

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

Добавьте обработчики событий выбора команд меню:

Private Sub mnuBlack_Click()

mnuBlue.Checked = False

mnuBlack.Checked = True

mnuRed.Checked = False

col = 0

End Sub

Private Sub mnuBlue_Click()

mnuBlue.Checked = True

mnuBlack.Checked = False

mnuRed.Checked = False

col = 1

End Sub

Private Sub mnuRed_Click()

mnuBlue.Checked = False

mnuBlack.Checked = False

mnuRed.Checked = True

col = 4

End Sub

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

   


Рис. 26                                                         Рис. 27

Напишите обработчик команды меню выхода из приложения:

Private Sub mnuExitYes_Click()

End

End Sub


Содержание раздела