Работа с векторным изображением в VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Работа с векторным изображением в VB

Сообщение XairOn » 03.01.2005 (Пн) 11:50

Здравствуйте. Вопрос мой наверное не нов, но я так нигде и не смог ниайти на него ответа. Какие средства есть в VB для работы с веткорным изображением. Допустим у меня на форме есть два объекта (скажем, два квадрата) по щелчку на один из них, он должен выделяться другим цветом, а потом прога должна выдать MsgBox с номером квадрата по которому щелкнули (1 или 2). Подскажите, как это сделать???

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.01.2005 (Пн) 14:22

Руками, через FillRect и PtInRect
Изображение

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 03.01.2005 (Пн) 15:26

Клик по квадрату тока через MouseDown
Фигуры и Линии в VB не имеют ивентов, особенно нарисованные на форме :)
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 03.01.2005 (Пн) 16:33

Спешал фо ю накорябал экземпл проджект.
Лови!
:arrow: http://myksoft.narod.ru/VectDraw.rar
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 03.01.2005 (Пн) 23:53

tyomitch писал(а):Руками, через FillRect и PtInRect


Насчет FillRect у меня была мысль, но в PtInRect мне ничего неизвестно, ни размеров прямоугольника, ни его координат, что бы проверить принадлежит ли точка в которую ткнул пользователь, этому прямоугольнику :-( Вот если бы можно было это определить (принадлежность точки прямоугольнику) было бы граздо легче. Но увы... :-(

KDima писал(а):Фигуры и Линии в VB не имеют ивентов, особенно нарисованные на форме


Вот "особенно" мне больше всего понравилось - а что остальные имеют???

Спасибо тебе за "экземпл проджект", но это не то что нужно, ты видать не так понял. Прямоугольник нарисовать несложно (ты там кстати, что-то перемудрил малость). Так вот рисовать его не надо (он уже есть), нужно определить, что клик был именно внутри данного прямоугольника и вывести в зависимости от этого сообщение (если к примеру на форме 2 прямоугольника, юзер тыкнул по второму - он должен закраситься и сообщить, что это именно прямоугольник №2).

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 04.01.2005 (Вт) 0:06

А ты прямоугольник рисуешь через "Line(,)-(,), B", или это Shape? Или через API? :roll:

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 04.01.2005 (Вт) 0:16

A.A.Z. писал(а):А ты прямоугольник рисуешь через "Line(,)-(,), B", или это Shape? Или через API? :roll:


Это Shape

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2005 (Вт) 0:18

XairOn, лови пример:
Код: Выделить всё
Option Explicit
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal ptx As Long, ByVal pty As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Dim Rects(1 To 2) As RECT

Private Sub Form_Load()
SetRect Rects(1), 0, 0, 100, 100
SetRect Rects(2), 50, 50, 150, 150
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Long, hbr As Long
X = ScaleX(X, ScaleMode, vbPixels)
Y = ScaleY(Y, ScaleMode, vbPixels)
For i = LBound(Rects) To UBound(Rects)
    If PtInRect(Rects(i), X, Y) Then
        hbr = CreateSolidBrush(QBColor(i))
        FillRect hdc, Rects(i), hbr
        DeleteObject hbr
        Caption = i
    End If
Next
End Sub

Private Sub Form_Paint()
Dim i As Long, hbr As Long
For i = LBound(Rects) To UBound(Rects)
    hbr = CreateSolidBrush(QBColor(i))
    FillRect hdc, Rects(i), hbr
    DeleteObject hbr
Next
End Sub

Число прямоугольников можешь наращивать по вкусу.


Если надо, чтобы были именно Shape, то формируй массив Rects при заходе в Form_MouseDown.
Изображение

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 04.01.2005 (Вт) 15:30

XairOn писал(а):
KDima писал(а):Фигуры и Линии в VB не имеют ивентов, особенно нарисованные на форме


Вот "особенно" мне больше всего понравилось - а что остальные имеют???


Там был еще :arrow: :)


Спасибо тебе за "экземпл проджект",


Незахто.

ты видать не так понял


Да...

Код: Выделить всё
(ты там кстати, что-то перемудрил малость)


Код не для прямоугольников.... разве для прозрачных (выбирать их надо за границу)
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 04.01.2005 (Вт) 20:30

Shape??? Так тогда ж тебе его координаты известны! :|

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 04.01.2005 (Вт) 21:03

Мда... А вообще хотелось бы заюзать библиотеки OFFICE для этих целей.....

Удобный инструмент, но как до него добраться..... :roll:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: YaCy [Bot] и гости: 17

    TopList