Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 28
1

Рисование мышкой. При нажатии левой кнопки мыши и ее перемещении рисуется кривая

26.02.2014, 21:44. Показов 4269. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня vb 2010 надо написать программу при нажатии левой кнопки мышки и ее перемещении рисуется кривая. Что-то вроде карандаша в фотошопе. Подскажите как это реализовать или приведите примеры реализации.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2014, 21:44
Ответы с готовыми решениями:

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

Нажатием левой кнопки мыши выбирать и запоминать цвет, при нажатии правой кнопки мыши - устанавливать выбранный цвет
Люди добрые, киньте какой-нибудь рабочий .asm для masm, похожий на решение следующей задачи, а то...

Тетрадь, открывающаяся при нажатии левой кнопки мыши
Например, у меня лежит тетрадь на столе и при нажатии на лкм он открывается, как это сделать?

Не активируются окна при нажатии левой кнопки мыши
Проблема такая. при открытии 2-х окон невозможно неакитивное окно выделить курсором, только при...

4
207 / 224 / 87
Регистрация: 21.04.2013
Сообщений: 404
26.02.2014, 23:03 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Нет у меня фотошопа, но если как в Paint, то первое, что придумалось
VB.NET
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
Public Class Form1
 
    Private MouseLelfDown As Boolean = False
    Private MouseCoords As Point
 
    Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If e.Button = MouseButtons.Left Then
            MouseLelfDown = True
            MouseCoords = e.Location
        Else
            MouseLelfDown = False
        End If
    End Sub
 
    Private Sub Form1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        MouseLelfDown = False
    End Sub
 
    Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If MouseLelfDown Then
            Dim g As Graphics = Graphics.FromHwnd(Me.Handle) 'или =CreateGraphics()
            g.DrawLine(New Pen(Color.Black, 1), MouseCoords, e.Location)
            MouseCoords = e.Location
        End If
    End Sub
End Class
Сохранения рисунка нет. Для сохранения нужно создать Bitmap и рисовать на нем.
0
997 / 356 / 135
Регистрация: 27.10.2006
Сообщений: 764
26.02.2014, 23:17 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Лукин С.Н. Понятно о Visual Basic .NET. Cамоучитель. Том 3 стр. 560

VB.NET
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
Public Class Form1
    Dim Лист As Bitmap
    Dim Гр, Граф As Graphics                         'Объекты класса Graphics над Листом и над формой
    Dim Кисть As New SolidBrush(Color.Black)        'Цвет карандаша поначалу черный
    Dim Толщина As Integer = 3
 
    Dim Перо As New Pen(Color.Black, 3)       'Цвет карандаша поначалу черный, толщина=3
    'Координаты мыши при предыдущем (перед текущим) наступлении события MouseMove:
    Dim X_предыдущее As Long
    Dim Y_предыдущее As Long
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Лист = New Bitmap(Me.Width, Me.Height)
        Гр = Graphics.FromImage(Лист)
        Граф = Me.CreateGraphics
        Перо.StartCap = Drawing2D.LineCap.Round     'Иначе линия получается не гладкая
        Перо.EndCap = Drawing2D.LineCap.Round
    End Sub
 
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles MyBase.MouseMove
        If e.Button = MouseButtons.Left Then
            'Рисуем отрезок прямой от текущего положения мыши до предыдущего:
            Гр.DrawLine(Перо, e.X, e.Y, X_предыдущее, Y_предыдущее)
            Граф.DrawLine(Перо, e.X, e.Y, X_предыдущее, Y_предыдущее)
            'Запоминаем текущее положение мыши для будущего срабатывания MouseMove, 
            'когда оно будет уже предыдущим:
            X_предыдущее = e.X
            Y_предыдущее = e.Y
        End If
    End Sub
 
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles MyBase.MouseDown
        'В начальный момент рисования, когда мы только нажимаем кнопку мыши, 
        'предыдущее и текущее положения мыши совпадают:
        X_предыдущее = e.X
        Y_предыдущее = e.Y
    End Sub
 
  Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
        Лист = New Bitmap(Me.Width, Me.Height)
        Гр = Graphics.FromImage(Лист)
        Граф = Me.CreateGraphics
    End Sub
End Class

Чтобы сохранить ваш рисунок - поместите на форму объект SaveFileDialog1 и кнопку

VB.NET
1
2
3
4
5
6
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If SaveFileDialog1.ShowDialog() = DialogResult.Cancel Then Exit Sub
        Dim Файл As String = SaveFileDialog1.FileName
        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
        Лист.Save(Файл)
    End Sub
0
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 28
03.03.2014, 01:18  [ТС] 4
очень благодарен только не могу с сохранениям пока разобратся
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
03.03.2014, 08:27 5
Мой вариант:
VB.NET
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
Public Class Form1
    Dim points As Point()
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Me.DoubleBuffered = True
    End Sub
    Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
        If (e.Button = Windows.Forms.MouseButtons.Left) Then
            points(points.Length - 1) = e.Location
            Me.Refresh()
        End If
    End Sub
 
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
        If (points Is Nothing) Then
            points = New Point(0) {}
            Return
        ElseIf (points.Length < 2) Then
            Array.Resize(Of Point)(points, points.Length + 1)
            Return
        End If
        e.Graphics.DrawCurve(Pens.Black, points)
        Array.Resize(Of Point)(points, points.Length + 1)
    End Sub
End Class
0
03.03.2014, 08:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2014, 08:27
Помогаю со студенческими работами здесь

Переключение видеостраниц при нажатии левой кнопки мыши
Заполнить страницу видеопамяти символом xi ((x0 =’a’, x1 =’b’ и тд) с разными атрибутами на каждой...

Переключение видеостраниц при нажатии левой кнопки мыши
Доброе время суток, помогите в разработке следующей программы, заранее спасибо: 1. Заполнить i-ю...

При нажатии левой кнопки мыши выскакивают вкладки рекламы
При пользованием хрома периодически выскакивают разные рекламы на момент клика мыши - я уже раньше...

Увеличение размера строки при нажатии левой кнопки мыши
Хочу выведенную строку увеличивать (размер шрифта) при нажатии левой кнопки мыши. Но ничего не...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru