Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Me.Line (AnchorX, AnchorY)-(X, Y), , B⇐ ПредыдущаяСтр 51 из 51
Две запятые подряд – пропущен цвет (оставлен черный по умолчанию). Но запятые должны быть, даже если не указан цвет – таков синтаксис оператора. Для переключения на рисование прямоугольника – сделайте кнопку на панели инструментов. Рисунок на кнопке – прямоугольник. Чтобы не искать такой рисунок, мы его сделаем сами. Для этого используем программу Imagedit. Вы можете ее скопировать себе на дискету. Она находится в каталоге Visual Basic’а.
Запустите программу:
Далее. Для того, чтобы указывать редактору, что рисовать – используют установку флага (переменную типа 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
|