Портал разработчиков САПР Суббота, 04.05.2024, 11:06
Приветствую Вас Гость | RSS
Главная страница | Каталог статей | Регистрация | Вход
» Меню сайта

» Категории каталога
Работа с графикой [1]
Работа с графикой средствами языка Visual Basic 6.0, а также с использованием в его среде Win32API
Хуки и сабклассинг [1]
Использование скрытых возможностей языка...

Начало » Статьи » VB6 » Работа с графикой

Как рисовать линии на VB6






Программироание на языке Visual Basic 6.0



Нарисуем линию :)

........Итак приступим к изучению новой стороны программирования. Сегодня мы будем учиться рисовать линии.
Это занятие несложное. Тем не менее, я постараюсь как можно подробнее объяснить механизм работы кода к данной статье.
Она будет своего рода "Hello World!" для тех, кто впервые программирует c gdi.

........Откроем новый проект. Стандартеый exe. Два раза кликнем по форме и окажемся в редакторе кода.
В этом уроке мы будем только рисовать и никаких элементов управления помещать на форму не нужно.

........Объявим четыре переменные для хранения координат начала и конца отрезка.






Option Explicit
Dim
X1 As Single, y1 As Single
Dim
X2 As Single, y2 As Single



........А далее все просто: в событии mousedown получаем координаты курсора мыши x
и y при клацании по форме






Private Sub form_MouseDown(Button As Integer, ShIft As Integer, X As Single, Y As Single)



........Будем считать, что начало линии будет в той точке, в которой мы кликнули мышью. Для
этого присвоим переменным x1 и y1 соответствующие значения





X1 = X
y1 = Y
Line (X1, y1)-(X2, y2)


End
Sub




........С методом Line вы можете подробнее ознакомиться здесь.
........А сейчас я предлагаю запустить наше приложение и посмотреть, что получилось.
........А получилось вот что: при обработке события mousedown метод Line чертит линию, соединяющую точку с координатами
x1 и y1 с точкой с координатами x2 и y2. Но почему все линии рисуются с левого верхнего угла формы? - спросите вы.
........ Да потому что переменным x2 и y2 мы не присвоили никакого значения. И по умолчанию они равны нулю.
........Прям как в жизни. Забыл посолить борщ и он остался не соленым. Не поступил в институт и остался без высшего
образования :)
........Не нужно повторять этих ошибок в будущем.
В буууудущем... вот как я заговорил. А кто знает, когда оно наступит? Я не знаю, поэтому и живу здесь и сейчас:
И оно уже есть!
........Чего же мы ждем? ДЛя того, чтобы борщ был посолен его нужно посолить. Логично?
Иными словами нужно присвоить переменным x2 и y2 соотвствующие значения:






Private
Sub form_MouseMove(Button As Integer, ShIft As Integer, X As Single, Y As Single)

X2 = X
y2 = Y

End
Sub




........А теперь самое время посмотреть что получается. Запускаем и ... ничего :(.
Почему??? Потому что так надо. И никуда от этого не деться. Причина всегда внутри нас.
Но мы недостаточно себя знаем. В жизни вообще нужно быть внимательным:
Мы получаем координаты мыши при любом перемещении курсора по форме. И присваиваем их значения переменным x2 и у2.
При клике мыши по форме мы получаем те же координаты и присваиваем их переменным x1 и y1.
Таким образом получатся мы чертим не линию, а точку.
Как же это исправить? Вообще по моему это вопрос скорее философский.
В жизни все подчиняется одним и тем же законам. Эти законы проявлены внутри нас. А значит мы заранее знаем отвты на все вопросы.
Например все знают старую русскую пословицу: утро вечера мудреннее!
Представтье, что мы чертим линию своей собственной жизни. И чтобы было если бы она начиналась и заканчивалась
одной и той же точке? Представили? Если это было бы так, вас бы здесь не было.
А теперь начертим эту линию, подобно тому как ежесекундно мы чертим свою собственную:
наша жизнь подчинена циклам. Эти циклы правят миром. День-Ночь, Свет-Тьма...
........К чему я клоню? К тому, что нужно тоже создать такой цикл:
живой цикл, а именно - между переменными x1 и y1.





Option Explicit
Dim
X1 As Single, y1 As Single
Dim
X2 As Single, y2 As Single


Private
Sub form_MouseDown(Button As Integer, ShIft As Integer, X As Single, Y As Single)


Line (
X1, y1)-(X2, y2)

X1 = X
y1 = Y


End
Sub


Private
Sub form_MouseMove(Button As Integer, ShIft As Integer, X As Single, Y As Single)

X2 = X
y2 = Y


End
Sub



Ура! Мы научились чертить линии!!!! Но что-то не так... как-то это не по нашему. Наша
линия не создается при движении мыши, а показывается только после клика
Ну не знаю, ког как, а меня такое дело не устраивает: доделываю код. Я считаю,
что человек должен контролировать любое мгновение своей жизни, любое действие... свою линию жизни





Option Explicit
Dim
X1 As Single, y1 As Single
Dim
X2 As Single, y2 As Single


Private
Sub form_MouseDown(Button As Integer, ShIft As Integer, X As Single, Y As Single)

AutoRedraw = True
Line (X1, y1)-(X2, y2)
X1 = X
y1 = Y
AutoRedraw = False


End
Sub


Private
Sub form_MouseMove(Button As Integer, ShIft As Integer, X As Single, Y As Single)

If X1 = 0 And y1 = 0 Then Exit Sub

X2 = X
y2 = Y
Me.Refresh
Line (X1, y1)-(X, Y)



End
Sub


Ну вот и все! Удачи и успехов в постижении новых высот! Пока ;)

P.S. Каждый, у кого возник вопрос, связанный с описанным в этой статье материалом - может перейти по ссылке,
туда, где эта статья обсуждается. Возможно кто-то там уже ответил на ваш вопрос, а если нет.. ну это даже лучше
- навстречу неизведанному, регистриркйтесь, спрашивайте не стесняйтесь


Категория: Работа с графикой | Добавил: sham (20.04.2007)
Просмотров: 8777 | Комментарии: 17 | Рейтинг: 4.5 |

Всего комментариев: 4
4 Brandonfrore  
0
remedy asset management <a href=""> https://forums.dieviete.lv/profils/127605/forum/ </a> drug war clock

3 Czdnfm  
0
lipitor 20mg pills <a href="https://lipiws.top/">buy cheap atorvastatin</a> buy lipitor 40mg generic

2 wolfie  
0
Приятно, когда хорошо реагируют на комментарии biggrin ) Вот теперь, мне кажется, тема раскрыта полностью на том уровне, который требуется для развития творчества happy ) Теперь бы еще отдельно статью "А теперь давайте и круг нарисуем ))" и будет то что надо - начальный джентельменский набор: линия+прямоугольник, круг+овал+дуга, ну а про точку PSET(x,y),c и так всем всё понятно ))

1 wolfie  
0
а где же про параметры для прямоугольников? про
Line (X1, y1)-(X2, y2),цвет, b или bf (так акжется ))) ? ждем продолжения ?
Ответ: Мне очень приятно читать подоные комментарии. Я невероятно рад. Но главной целью этой статьи было дать алгоритм отрисовки на ВБ6, а не дать справочное руководство по графике в вб6:

впрочем если хотите, можно его немножко и дороботать, например кинуть на форму PictureBox и 4-ре OptionButtona и написать следующее: (уже MS Paint почти )
Option Explicit

Dim X1 As Single, y1 As Single
Dim X2 As Single, y2 As Single

Enum Commands
cLine = 1
Rectangle = 2
FillRectangle = 3
cNull = 0
End Enum
Dim C As Commands

Private Sub picture1_MouseDown(Button As Integer, ShIft As Integer, X As Single, Y As Single)

Picture1.AutoRedraw = True
Select Case C
Case 1
Picture1.Line (X1, y1)-(X2, y2)
Case 2
Picture1.Line (X1, y1)-(X2, y2), , B
Case 3
Picture1.Circle (X1, y1), Abs(X2 - X1)
End Select

X1 = X
y1 = Y
Picture1.AutoRedraw = False

End Sub

Private Sub picture1_MouseMove(Button As Integer, ShIft As Integer, X As Single, Y As Single)

If X1 = 0 And y1 = 0 Then Exit Sub

X2 = X
y2 = Y
Picture1.Refresh

Select Case C
Case 1
Picture1.Line (X1, y1)-(X2, y2)
Case 2
Picture1.Line (X1, y1)-(X2, y2), , B
Case 3
Picture1.Circle (X1, y1), Abs(X2 - X1)
End Select

End Sub

Private Sub Option1_Click()
C = cLine
End Sub

Private Sub Option2_Click()
C = Rectangle
End Sub

Private Sub Option3_Click()
C = FillRectangle
End Sub

Private Sub Option4_Click()
C = cNull
Picture1.Refresh
X1 = 0
y1 = 0
End Sub

просто хотелось бы дать нашим разработчикам свободу для творчества и развитиия мысли...


Имя *:
Email *:
Код *:
» Форма входа

» Поиск по каталогу

» Друзья сайта


Copyright MyCorp © 2006
Сайт управляется системой uCoz