Ну елки, не получается!

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

Ну елки, не получается!

Сообщение moppuk » 10.02.2006 (Пт) 19:59

Помогоите народ...
Надо сделать так.
есть Picturebox.
Я навожу на него мышку нажимаю vbLeftButton, начинается рисоваться линия, двигаю мишь mouse_move - линия тянется, как только отпустил ее линия остается.
Я примерно понимаю, что это надо обрабатывать события mouseup, down, move... Понимаю что при down - надо draw - true и начальные координаты задать. при Up перкратить рисование draw-faulse. А вот как быть при move - не понимаю. Как себя ведут координаты, и как вобще обработать это событие.
На форуме искал, нашел похожие веши, но я просто не могу разобраться что там происходит. А очень надо, хотя для себя.
Я могу конечно скопировать и вставить в свою программу, но мне это не интересно. Прошу, помогить разобраться.
Буду признателен за маелнький кодик с коментариями. Заренее огромное спасибо!
С уважением Морозов Николай

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 10.02.2006 (Пт) 20:07

Код: Выделить всё

Dim sv As Boolean, X1 As Single, Y1 As Single, col As Long

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
if Button=Vbleftbutton then
frm1.PSet (X, Y), col 'ставим точку под курсором
X1 = X
Y1 = Y
sv = True 'Ставим флаг что надо рисовать
end if
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If sv Then ' Если флаг установлен рисуем линию
frm1.Line (X1, Y1)-(X, Y), col 'RGB(k, l, z)
X1 = X
Y1 = Y
End If
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
sv = False 'хватит уже рисовать =)
End Sub

Private Sub Form_Load()
col=RGB(11,56,255) ' Ставим цвет линии
End Sub


Что непонятно спрашивай :)
Если всё делать своими ручками, они скоро отвалятся !

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 10.02.2006 (Пт) 20:11

Хорошо... не вопрос... Отлично! Все понятно, спсибо.
А как с прямой быть, это работает как карандаш!!!
А мне просто прямую надо. Пример постоение прямой в MS Word.
С уважением Морозов Николай

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 10.02.2006 (Пт) 20:18

Да и еще...
На форме то все получается. А как только стоит вместо form1_ переименовать на picture1 - то все... В picturebox не работает!!!!
С уважением Морозов Николай

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 10.02.2006 (Пт) 20:20

Измени
Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If sv Then
Me.Cls ' Чистим форму
Form1.Line (X1, Y1)-(X, Y), col 'RGB(k, l, z)
'X1 = X
'Y1 = Y
End If
End Sub

Вродь так, если я тебя правильно понял
Если всё делать своими ручками, они скоро отвалятся !

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 10.02.2006 (Пт) 20:21

moppuk писал(а):Да и еще...
На форме то все получается. А как только стоит вместо form1_ переименовать на picture1 - то все... В picturebox не работает!!!!

Ну так наверно и в самом коде надо заменить имя формы на имя пикчурбокса, решивший сам разобраться moppuk :) :P
Если всё делать своими ручками, они скоро отвалятся !

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 11.02.2006 (Сб) 0:46

Ха-ха-ха.
Ты чего Kovu меня вообще за чайника чтоли держешь? =)
Меняю я, да вот толку нет ни какого... Нет лини в пикчурбоксе.
Понимаешь.
С уважением Морозов Николай

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 11.02.2006 (Сб) 1:21

А я вообще то делал рендеринг в реальном времени. Ну есть цикл, в нём рендерится например линия
есть тип в котором содержатся координаты и массив объектов такого типа... В когда ты начинаешь рисовать линию в массив добавляется один объект и начинает рендерится а ты задаешь координаты! :)
#define ROFL 0xDDDD

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 11.02.2006 (Сб) 1:28

Блин, ну хоть убейте! Не рисует он в pictureBox... и все...
Может надо какое свойство выставить... Нее, он рисует... Но что-то не то. При смене DragMode меняется. Но добиться лини так и не получилось!!!
Короче что получается! Линия идет, но как мычку начинаю крутить, то появляется много - много линий... и пипец. Цвето тоже не соответствует!
Что делать?
С уважением Морозов Николай

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.02.2006 (Сб) 9:47

как это? показывай код для PictureBox... что-то тут не то и не так
Весь мир матрица, а мы в нем потоки байтов!

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 11.02.2006 (Сб) 11:22

moppuk
Госьпади :)
Ты второй код смотрел?
Так вот там перед чертежом линии стоит frm1.Cls, так берешь и заменяешь на PictureBox.Cls и(о чудо!) все старые линии исчезают.
По поводу цвета: берешь функция RGB выставляешь с помощью неё цвет и будет тебе счастье :wink:
Если всё делать своими ручками, они скоро отвалятся !

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 11.02.2006 (Сб) 11:44

Kovu дело говорит, инфы уже достаточно в теме.

Ну если что вот полностью готовый кусок. Когда-то планировал сделать Paint, но так и не доделал.

Код: Выделить всё
Public intN As Integer
Public intX1 As Integer
Public intY1 As Integer
Public boolDrawing As Boolean
Dim rArr(100, 4) As Integer

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
intX1 = X
intY1 = Y
boolDrawing = True
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If boolDrawing Then
  Picture1.Cls
  For t = 1 To intN
    Picture1.Line (rArr(t, 0), rArr(t, 1))-(rArr(t, 2), rArr(t, 3))
  Next t
  Picture1.Line (intX1, intY1)-(X, Y)
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
intN = intN + 1
rArr(intN, 0) = intX1
rArr(intN, 1) = intY1
rArr(intN, 2) = X
rArr(intN, 3) = Y
boolDrawing = False
End Sub

Прям один в один что тебе нужно.

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 11.02.2006 (Сб) 15:10

Все спасибо всем огромное.
Я разобрался. Только еще вчера. Да касяк был в me.cls , думал, че это за фигня! ну а потом допер методом случайности. Прсто поменял и и все пошело...
А теперь вот как замутить, чтобы оставалсь эта линия, и я мог еще одну нарисовать?
С уважением Морозов Николай

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.02.2006 (Сб) 15:20

Николай, принципиально неправильный подход :)

Тебе надо соединять перетащенные picturebox'ы линиями?

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 11.02.2006 (Сб) 15:46

Amed, да, это как ты понял, линии связи соеденяющие рабочие станции и оборудование. А почему не правильно? Я короче что делаю, при нажатии в treeview на "тип кабеля" я разрешаю рисование, меняю курсор на карандашик и так сказать начинаю рисовать их на picture1. Я заменил Frame на picture. А при нажатии на остальные элементы в trreview я просто запрещаю рисовать и все...
Какой-то есть одход правильнее, я с удовольствием прислушаюсь к твоим словам.
С уважением Морозов Николай

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.02.2006 (Сб) 16:17

Подход неправильный, потому что соединительные линии получаются растровыми, а надо, чтобы были векторными. Надо не "рисовать", а "тянуть".
Форумчане помогут разобраться. Только сформулируй задачу правильно. Опиши процесс, каким он должен быть.

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 11.02.2006 (Сб) 16:58

Хорошо... Как сказал Amed. Он прав...
Начинаю с самого начала...
Программа расчета построениой локальной сети. Есть picturebox (как контейнер для рисования), есть listview с картинками различного оборудования. Переношу их на picture1 и строю структуру. В качестве линий связи вот мне надо что-то такое придумать, что бы можно было соеденять оборудовани. Рисование как выяснилось не очень подходит в результате, того, что на picturebox я эти картинки могу перетаскивать drag&drop. А когда я только перетащу картинку, то линия от оборудования останется на месте...
Кто-нибудь сталкивался с такими вариантами. Посоветуйте. Как лучьше это организовать.
Блин, чтобы я без вас всех делал а! Этому форуму слава и хвала!
С уважением Морозов Николай

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.02.2006 (Сб) 17:59

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 11.02.2006 (Сб) 21:57

Попробую разобраться. ! ! !
Спмсибо. Если что я тогда напишу.
Могу не понять того или иного случая.
С уважением Морозов Николай

Info_m.be_free
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 27.02.2003 (Чт) 21:38
Откуда: Ирпень

Сообщение Info_m.be_free » 12.02.2006 (Вс) 13:36

а сеточка иконок тебе не подойдет? или контрол
Код: Выделить всё
Добваить(уровень,сторона)

я где-то такой видел. Ну результаты 2-мерного массива потом в файл или куда тебе нужно или сценарий добавления.[/b]

Ем вилкой...

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 12.02.2006 (Вс) 18:47

GSerg, слушай... А не мог бы ты прокоментировать что по чем.
А то я чего-то не очень понимаю.
Е если в код добавишь коментарии, то буду не очень тебе благодарен!
http://bbs.vbstreets.ru/viewtopic.php?p=6575987#6575987
С уважением Морозов Николай


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 47

    TopList