Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925

Построение ломанной линии с использованием мыши

28.01.2012, 23:04. Показов 2951. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго время суток всем. Помогите мне, пожалуйста, с таким вопросом.
Ситуация следующая...Есть форма на которой уже построена система координат, где левый верхний угол место нуля.
1. Как можно при помощи мыши строить на данной форме ломанную таки образом, чтобы при перемещении свободного конца новой линии прописывались координаты. И при этом ломанная линия не может выходить за пределы системы координат.
2. И каким образом можно прекратить режим рисования ломанной линии (использования мыши в качестве рисования ломанной линии).

Вот я тут пытался сделать то о чём я писал выше, но возникает оч много линий =(


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Option Explicit
Dim koor_x As Double, koor_y As Double
Dim klava As Boolean
Dim p() As Integer, n As Integer, i As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
Private Form
Private Sub Form_Load()
x1 = 0
y1 = InputBox("Введите высотную отметку - y1")
End Sub
Private Sub Form_MouseMove(button As Integer, Shift As Integer, X As Single, y As Single)
    x2 = X
    y2 = Int(y / 25) * 25
    Line (x1, y1)-(x2, y2)
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    'Print y2
End Sub
Private Sub form_MouseDown(button As Integer, Shift As Integer, X As Single, y As Single)
    x2 = X
    y2 = y
    Line (x1, y1)-(x2, y2)
    x1 = x2
    y1 = y2
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    Print y2
End Sub

Заранее всем спасибо, кто откликнулся.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2012, 23:04
Ответы с готовыми решениями:

Вычислить длину L ломанной линии
В квадрат со стороной l случайным образом одна за другой вбрасываются 100 точек и последовательно создается ломаная линия. Вычислить длину...

Рассчитать длину ломанной линии
Программа позволяет рисовать мышью произвольную ломанную линию. Подскажите, как выводить длину этой линии? import java.awt.BasicStroke;...

Рисование ломанной линии и фиксирование её клавишей
Есть такая задачка: Рисуется ломаная линия. Фиксирование первых и очередных узлов осуществляется нажатием клавиши ''Enter'',...

9
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
29.01.2012, 13:21
Зажав левую кнопку, таскаешь свободный конец, затем отпускаешь и нажимаешь правую.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Option Explicit
Dim koor_x As Double, koor_y As Double
Dim klava As Boolean
Dim p() As Integer, n As Integer, i As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
Dim Lin(1 To 64, 1 To 64, 1 To 64, 1 To 64) As Long
Dim nLin As Integer, x1Lin(1 To 64) As Long, y1Lin(1 To 64) As Long, x2Lin(1 To 64) As Long, y2Lin(1 To 64) As Long
Private Sub Form_Load()
x1 = 100: y1 = 100: nLin = 1
'y1 = InputBox("Введите высотную отметку - y1", , 1)
'x1 = InputBox("Введите высотную отметку - x1", , 1)
End Sub
Private Sub form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    x2 = X
    y2 = Y
    If Button = 2 Then
    cls
    nLin = nLin + 1
    'ReDim Preserve Lin(1 To nLin, 1 To nLin, 1 To nLin, 1 To nLin)
     For i = nLin - 1 To 64
      x1Lin(i) = x1: x2Lin(i) = x2: y1Lin(i) = y1: y2Lin(i) = y2
     Next
    For i = 1 To nLin
     Line (x1Lin(i), y1Lin(i))-(x2Lin(i), y2Lin(i)): Print y2Lin(i)
    Next
    x1 = x2
    y1 = y2
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    'Print y2
    End If
End Sub
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
    Line (x1, y1)-(x2, y2), &H8000000F
    ForeColor = &H8000000F
    Print y2
    ForeColor = RGB(0, 0, 0)
    x2 = X
    y2 = Int(Y / 25) * 25
     Line (x1, y1)-(x2, y2), RGB(200, 100, 200)
     Print y2
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    End If
    'Print y2
End Sub
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
29.01.2012, 17:04  [ТС]
Интересно =) Единственное...в моём коде представлена начальная отметка, и изменение координаты по оси ординат с кратностью 25. Допустим ввели начальную координату (это будет точка 1) и от этой точки при помощи мышки оттягиваем курсор мыши за которым тянется линия, не удерживая никакую клавишу мыши. Здесь не знаю как сделать чтобы даже при перемещении свободного конца линии (курсора мыши) рядом писалась координата ? Из моего кода, во-первых, получается много линий, не знаю как затирать! и во вторых, не знаю как сделать так чтобы рядом с перемещаемым курсором мыши писались координаты свободного конца линии.
Допустим, при перемещении свободного конца линии, где находится курсор мыши, прописывается необходимая координата (которая мне нужна) я соответственно делаю клик левой кнопкой мыши. В месте где я сделал клик (2 точка после начальной) прописывается координата ее местоположения на данной форме. Ну и т.д.
Хотел спросить ещё вот что, а что это за массивы?
Для хранения линий и значений координат линий??
Visual Basic
1
2
Dim Lin(1 To 64, 1 To 64, 1 To 64, 1 To 64) As Long
Dim nLin As Integer, x1Lin(1 To 64) As Long, y1Lin(1 To 64) As Long, x2Lin(1 To 64) As Long, y2Lin(1 To 64) As Long
спасибо =)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
29.01.2012, 18:25
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от proft Посмотреть сообщение
Для хранения линий и значений координат линий??
Dim Lin(1 To 64, 1 To 64, 1 To 64, 1 To 64) As Long
Да, именно так. А 64 взял с потолка, чтобы не делать Redim.
А координаты понял, как я рисовал?
Visual Basic
1
2
3
4
5
    ForeColor = &H8000000F
    Print y2
    ForeColor = RGB(0, 0, 0)
    y2 = Int(Y / 25) * 25
     Print y2
То есть во время движения курсора координаты рисуются чёрным цветом и , если движение продолжаются , тут же рисуются серым(как бы они есть, но на фоне формы их не видно), поэтому рядом с курсором только текущие чёрные координаты видны.
То же самое касается линий.

Добавлено через 26 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Option Explicit
Dim koor_x As Double, koor_y As Double
Dim klava As Boolean
Dim p() As Integer, n As Integer, i As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
Dim nLin As Integer, x1Lin(1 To 64) As Long, y1Lin(1 To 64) As Long, x2Lin(1 To 64) As Long, y2Lin(1 To 64) As Long
Private Sub Form_Load()
x1 = 100: y1 = 100: nLin = 1
'y1 = InputBox("Введите высотную отметку - y1", , 1)
'x1 = InputBox("Введите высотную отметку - x1", , 1)
End Sub
Private Sub form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    x2 = X
    y2 = Y
    If Button = 1 Then
    Cls
    nLin = nLin + 1
    'ReDim Preserve Lin(1 To nLin, 1 To nLin, 1 To nLin, 1 To nLin)
     For i = nLin - 1 To 64
      x1Lin(i) = x1: x2Lin(i) = x2: y1Lin(i) = y1: y2Lin(i) = y2
     Next
    For i = 1 To nLin
     Line (x1Lin(i), y1Lin(i))-(x2Lin(i), y2Lin(i)): Print y2Lin(i)
    Next
    x1 = x2
    y1 = y2
    End If
End Sub
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Line (x1, y1)-(x2, y2), &H8000000F
    ForeColor = &H8000000F
    Print y2
    ForeColor = RGB(0, 0, 0)
    x2 = X
    y2 = Int(Y / 25) * 25
     Line (x1, y1)-(x2, y2), RGB(200, 100, 200)
     Print y2
End Sub
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
31.01.2012, 18:58  [ТС]
Спасибо огромное)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.02.2012, 22:45
Вот посмотри с перерисовкой по таймеру
Вложения
Тип файла: rar рисование ломаной.rar (2.1 Кб, 21 просмотров)
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
03.02.2012, 19:50
С положительным и отрицательным предельными углами
Вложения
Тип файла: rar рисование ломаной.rar (2.5 Кб, 22 просмотров)
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
05.02.2012, 08:58
Вот ещё вариант с определением координат точки пересечения. Дополнительная фигура (щелчок на кнопке меню Dop_Fig) ) рисуется цветом QBColor(13) (впрочем, это неважно). Во время построения основной ломаной по таймеру один раз в секунду в процедуре Proverka_peresecheniya происходит проверка цвета точек линии, которую ты хочешь нарисовать. Если на ней встречается точка цвета
QBColor(13), то она определяется как точка пересечения с координатами xPoint, yPoint, и из нее опускается перпендикуляр. Процедура Proverka_peresecheniya работает пока только справа от оси У.(Сам допишешь, если нужно будет, это уже мелочь)
У меня возник вопрос : площадь какой фигуры нужно определить? Покажи на рисунке, а то на словах непонятно.
Миниатюры
Построение ломанной линии с использованием мыши  
Вложения
Тип файла: rar рисование ломаной.rar (3.8 Кб, 14 просмотров)
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
09.02.2012, 10:57  [ТС]
Доброго дня SoftIce. Спасибо за выложенные коды) Вот представляю тебе эскиз того , что должно быть в итоге. Спасибо)
З.Ы. Я ещё там в личку тебе написал...
Миниатюры
Построение ломанной линии с использованием мыши  
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.02.2012, 13:32
Сделал пока только для первой фигуры (потому что несложно для треугольника) вычисляется площадь, но только после щелчка.
Площадь в квадратных твипах
Миниатюры
Построение ломанной линии с использованием мыши  
Вложения
Тип файла: rar рисование ломаной.rar (4.6 Кб, 19 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2012, 13:32
Помогаю со студенческими работами здесь

Вычислить и вывести на консоль длину ломанной линии
Здравствуйте. У меня возникла проблема, я перевелся из одного университета в другой и в связи с этим поменялись языки программирования....

Вычислить и вывести на консоль длину ломанной линии
Разработать структуру с именем POINT, содержащую поля: • горизонтальная координата точки на плоскости; • вертикальная координата точки...

Рисование ломанной линии по точкам которые ставит пользователь
Преподаватель попросил выполнить данное задание "Пользователь ставит точки на плоскости, прога отрисовывает ломанные линии с максимальной...

Построение ломанной кривой через процедуры MouseDown и MouseMove
Доброго времени суток. Если кто может помогите пожалуйста в решении таких 2-ух задач. "Необходимо построить ломанную кривую,...

Форма делится на сектора. Курсором мыши можно рисовать линии. Цвет линии зависит
Народ спасайте. Задача такова " Форма делится на сектора (их количество задает пользователь). Курсором мыши можно рисовать линии. Цвет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru