Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Me.Line (AnchorX, AnchorY)-(X, Y), , B






Две запятые подряд – пропущен цвет (оставлен черный по умолчанию). Но запятые должны быть, даже если не указан цвет – таков синтаксис оператора.

Для переключения на рисование прямоугольника – сделайте кнопку на панели инструментов. Рисунок на кнопке – прямоугольник. Чтобы не искать такой рисунок, мы его сделаем сами. Для этого используем программу Imagedit. Вы можете ее скопировать себе на дискету. Она находится в каталоге Visual Basic’а.

 

Запустите программу:

 

  1. Пункт меню File> New…
  2. Выбрать пункт Icon(!)
  3. Затем EGA/VGA 16 color…
  4. Пункт меню Options> Grid (отобразить сетку)
  5. Залейте весь рисунок цветом экрана (Screen) – стандартный сине-зеленый. Это сделает фон прозрачным для системной палитры Windows (увидите).
  6. Затем черным нарисуйте прямоугольник.
  7. Сохраните. Затем этот рисунок Вы вставите в проект на кнопку панели инструментов.

 

Далее.

Для того, чтобы указывать редактору, что рисовать – используют установку флага (переменную типа Boolean). Если флаг установлен (true) – рисовать прямоугольник. Сброшен (false) – рисовать прямую. Флаг устанавливается по нажатию кнопки. Кнопка должна иметь свойство оставаться нажатой (tbrCheck) при рисовании квадрата. Затем, для рисования линии, мы ее отжимаем щелчком мыши.

Сделайте это и запустите программу – она должна рисовать так, как надо, но при перерисовке (ReDraw) в прямоугольники вставляет линии. Даже если Вы процедуру перерисовки сделаете зависимой от состояния флага – это не поможет – флаг имеет одно состояние для всей перерисовки. Это будут либо линии, либо прямоугольники.

Чтобы перерисовка была правильной – надо при сохранении координат фигуры в массиве сохранять еще и состояние флага. Затем считывать координаты вместе с флагом.

При сохранении состояния флага в массиве помните, что массив хранит только однотипные элементы – сохранение в массиве типа Integer переменной типа Boolean вызовет ошибку! Поэтому перед записью флага в массив преобразуйте его в число (0 – false или 1 – true)

 

Программа (сначала самостоятельно)

Dim AnchorX As Integer

Dim AnchorY As Integer

Dim OldX As Integer

Dim OldY As Integer

Dim MF() As Integer

Dim n As Integer

Dim Flag As Boolean

 

Private Sub Form_Load()

Flag = False

End Sub

 

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

AnchorX = X

AnchorY = Y

End Sub

 

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

If Flag Then

Me.Line (AnchorX, AnchorY)-(X, Y),, B

Else

Me.Line (AnchorX, AnchorY)-(X, Y)

End If

Call AddNew(AnchorX, AnchorY, X, Y, Flag)

End Sub

 

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

If Button Then

If Flag Then

Me.Line (AnchorX, AnchorY)-(OldX, OldY), & H8000000F, B

Me.Line (AnchorX, AnchorY)-(X, Y),, B

Else

Me.Line (AnchorX, AnchorY)-(OldX, OldY), & H8000000F

Me.Line (AnchorX, AnchorY)-(X, Y)

End If

OldX = X

OldY = Y

ReDraw

End If

End Sub

 

Public Sub ReDraw()

For i = 1 To n

If MF(5, i) = 1 Then

Me.Line (MF(1, i), MF(2, i))-(MF(3, i), MF(4, i)),, B

Else

Me.Line (MF(1, i), MF(2, i))-(MF(3, i), MF(4, i))

End If

Next i

End Sub

 

Public Sub AddNew(a, b, c, d, e)

n = n + 1

ReDim Preserve MF(5, n)

MF(1, n) = a

MF(2, n) = b

MF(3, n) = c

MF(4, n) = d

If e Then

MF(5, n) = 1

Else

MF(5, n) = 0

End If

End Sub

 

Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)

Flag = Not (Flag)

End Sub

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал