Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 13
1

Как нарисовать прямоугольник в VBA Excel

09.05.2016, 20:57. Показов 4554. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Координаты вершин прямоугольника должны задаваться по клику мышки. Я попытался создать программу, однако она не работает. Линии по идее должны рисоваться, однако они не рисуются.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
Option Explicit
Public x1, y1, x2, y2, x3, y3, x4, y4, m, X, Y
Dim Coord As New Collection
Const maxPoint = 4
Private Declare Function dwLineTo Lib "gdi32" Alias "LineTo" _
    (ByVal hdc As Long, ByVal X As Integer, ByVal Y As Integer) As Long
    Private Declare Function dwMoveTo Lib "gdi32" Alias "MoveToEx" _
    (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, _
    ByVal lpPoint As Long) As Long
 
Private Sub UserForm_Click()
m = m + 1
If m > 4 Then
Else
 
 
End If
End Sub
 
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Coord.Add X: Coord.Add Y
 
If Coord.Count = maxPoint * 2 Then
 
 
MyPaint
End If
 
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 
 
x1 = X
 
y1 = Y
 
End Sub
 
Private Sub MyPaint()
SetDrawStart X, Y
Call dwMoveTo(hdc, Coord.Item(1) = X, Coord.Item(1) = Y, 0)
Call dwLineTo(hdc, Coord.Item(2) = X, Coord.Item(2) = Y)
 
Call dwMoveTo(hdc, Coord.Item(2) = X, Coord.Item(2) = Y, 0)
Call dwLineTo(hdc, Coord.Item(3) = X, Coord.Item(3) = Y)
 
Call dwMoveTo(hdc, Coord.Item(3) = X, Coord.Item(3) = Y, 0)
Call dwLineTo(hdc, Coord.Item(4) = X, Coord.Item(4) = Y)
 
Call dwMoveTo(hdc, Coord.Item(4) = X, Coord.Item(4) = Y, 0)
Call dwLineTo(hdc, Coord.Item(1) = X, Coord.Item(1) = Y)
 
Dim i As Integer
Dim j As Integer
Dim Result As String
For i = 1 To Coord.Count Step 2
j = j + 1
Result = Result & "Точка " & j & ": X=" & Coord.Item(i) & _
" Y=" & Coord.Item(i + 1) & vbCrLf
Next i
MsgBox Result
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2016, 20:57
Ответы с готовыми решениями:

Как нарисовать прямоугольник, изменить его координаты и нарисовать заново уже без первого прямоугольника?
Как нарисовать прямоугольник, изменить его координаты и нарисовать заного уже без первого...

Нарисовать средствами VBA на рабочем листе Excel флаг Турции
Добрый вечер! Помогите, пожалуйста. Необходимо нарисовать средствами VBA на рабочем листе Excel...

как нарисовать прямоугольник
Проблема с прямоугольником case Item.Rectangle: g.DrawRectangle(new Pen(new...

как нарисовать прямоугольник
Доброго времени суток. вопрос: как сделать, чтобы при нажатии кнопки (Paint) в этой форме рисовался...

5
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
10.05.2016, 07:44 2
Visual Basic
1
SetDrawStart
Это что?
Visual Basic
1
 UserForm_MouseMove
Это зачем?
Visual Basic
1
Call dwLineTo(hdc
Что в данном случае hdc? Не объявлено. Не назначено!
dwLineTo предусматривает получение в качестве аргумента координату, а не присвоение:
Visual Basic
1
 Coord.Item(1) = X
И все эти ошибки указывает сам бейсик

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
50
Option Explicit
Private Type POINTAPI
    x As Double
    Y As Double
End Type
 
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal Y As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim Coord As New Collection
Const maxPoint = 4
 
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
    Coord.Add x: Coord.Add Y
    If Coord.Count = maxPoint * 2 Then MyPaint
End Sub
 
 
Private Sub MyPaint()
Dim hds, hWnd
Dim pt As POINTAPI
 
Dim i As Integer
Dim j As Integer
Dim Result As String
For i = 1 To Coord.Count Step 2
    j = j + 1
    Result = Result & "Точка " & j & ": X=" & Coord.Item(i) & _
    " Y=" & Coord.Item(i + 1) & vbCrLf
Next i
MsgBox Result
 
hWnd = FindWindow("thunderDFrame", Draw.Caption)
hds = GetDC(hWnd)
 
 
 MoveToEx hds, Coord.Item(1), Coord.Item(2), pt
 LineTo hds, Coord.Item(3), Coord.Item(4)
 
 MoveToEx hds, Coord.Item(3), Coord.Item(4), pt
 LineTo hds, Coord.Item(5), Coord.Item(6)
 
 MoveToEx hds, Coord.Item(5), Coord.Item(6), pt
 LineTo hds, Coord.Item(7), Coord.Item(8)
 
 MoveToEx hds, Coord.Item(7), Coord.Item(8), pt
 LineTo hds, Coord.Item(1), Coord.Item(2)
 
End Sub
1
Заблокирован
10.05.2016, 07:55 3
ONETUZ, потрудитесь уточнить - в каком приложении (с участием VBA) вы работаете?

И где там описан загадочный
Цитата Сообщение от ONETUZ Посмотреть сообщение
SetDrawStart
?
0
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 13
10.05.2016, 10:51  [ТС] 4
ONETUZ, потрудитесь уточнить - в каком приложении (с участием VBA) вы работаете?

И где там описан загадочный
Цитата Сообщение от ONETUZ Посмотреть сообщение
SetDrawStart
?
Я работаю в VBA в приложении MS Excel.

Добавлено через 1 минуту
Alex77755, Эксель придрался к Draw.Caption.

Добавлено через 2 часа 10 минут
Alex77755, ваша программа почти сработала!) Он теперь ругается на это:
Visual Basic
1
hWnd = FindWindow("thunderDFrame", Draw.Caption)
В остальном все супер!)
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
10.05.2016, 17:34 5
Draw = имя формы.
1
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 13
10.05.2016, 18:50  [ТС] 6
Alex77755, спасибо большое!) в таком виде:

Visual Basic
1
hWnd = FindWindow("thunderDFrame", frmDraw.Caption)
оно заработало)

Правда почему-то сама фигура появляется несколько в другом месте (чуть левее и выше). Зато пропорции фигуры точно такие, как я задавал, это ничего?
0
10.05.2016, 18:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2016, 18:50
Помогаю со студенческими работами здесь

Как нарисовать прямоугольник на форме ?
public void DrawRectangleRectangle(PaintEventArgs e) { // Create pen. Pen blackPen =...

Как нарисовать прямоугольник выделения?
2д графика, обычный пустой прямоугольник тот самый которым выделяют юнитов в любой стратегии (он...

Как нарисовать повернуты прямоугольник
Вот такой вопрос... Как нарисовать повернутый прямоугольник? Задача такая: 1. Рисуем...

Как нарисовать прямоугольник поверх флекса
Попробовал, не получилось. Может кто подскажет?


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

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