Страница: 1 |
Страница: 1 |
Вопрос: Работа с курсором
Добавлено: 26.07.12 01:45
Автор вопроса: merr
Всем Доброго Времени Суток!
Народ, может кто сталкивался с подобной задачей...
Есть картинка, на которой есть пиксели (не принципиально, это могут быть определенным образом ограниченные области-сектора) нескольких типов (например, отличаются по цвету). Задача в том чтоб при нажатии юзером кнопки мыши на определенном секторе и протаскивание ее с зажатой кнопкой копировало этот элемент туда где прошла мышь до тех пор, пока кнопка не будет отпущена. Другими словами, это некий способ "размножить" выбранный элемент, или как если бы вы макнули кисть в краску и стали бы чего-нить малевать на холсте :)
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #1
Добавлено: 26.07.12 09:24
Про картинку можно поподробнее? Это PictureBox или прорисованные на форме элементы?
Номер ответа: 2
Автор ответа:
Mikle
Вопросов: 5
Ответов: 134
Профиль | | #2
Добавлено: 26.07.12 09:28
Причём тут курсор? Это есть во многих графических редакторах - под курсор подставляем спрайт и рисуем им, как кистью.
Номер ответа: 3
Автор ответа:
merr
Вопросов: 11
Ответов: 31
Профиль | | #3
Добавлено: 26.07.12 17:50
Картинка в виде Picture Box. Все манипуляции только в ее пределах.
Mikle, мне к сожалению не хватает квалификации для понимания того как там все со спрайтами в графических редакторах. Хотя конечно интересно Да и задача изначально не художественная. Задача - "размножить" выбранный элемент в пределах контролируемой юзером области в Picture Box. Рисование в данном случае - лишь аналогия...
Номер ответа: 4
Автор ответа:
merr
Вопросов: 11
Ответов: 31
Профиль | | #4
Добавлено: 27.07.12 12:25
Вроде получилось
Теперь пытаюсь запихать в процедуру для мыши переменную из события для кнопки (KeyPress) чтоб при нажатии клавиши и зажатой кнопке + движении мыши все это обрабатывалось по-другому. Но вылезает ошибка о несоответствии процедуры ее описанию. Видимо невозможно впихнуть невпихуемое...процедура для мыши не приемлет никаких аргументов кроме собственных? Параметры процедуры мыши в процедуру для клавы тоже не принимаются. И те и другие параметры в 3-ю "обычную" процедуру тоже никак - или одни или другие - иначе "Argument not optional". Люди, подскажите как объединить параметры клавы и кнопок "под одной крышей"
Номер ответа: 5
Автор ответа:
merr
Вопросов: 11
Ответов: 31
Профиль | | #5
Добавлено: 27.07.12 12:28
Да, в примере забыл в начале строки
Номер ответа: 6
Автор ответа:
Mikle
Вопросов: 5
Ответов: 134
Профиль | | #6
Добавлено: 27.07.12 14:43
For j = Int(y) To Int(y)
Какой в этом смысл?
Нужно обрабатывать не KeyPress, а KeyDown и KeyUp.
Смотри пример:
http://tuapse-mikle.narod.ru/Paint.zip
Номер ответа: 7
Автор ответа:
merr
Вопросов: 11
Ответов: 31
Профиль | | #7
Добавлено: 27.07.12 15:20
Согласен, счетчик цикла выглядит абсурдно. В том то и дело что оно работает, поскольку мышь в движении, а для Picture Box задан пользовательский масштаб - Picture Box поделен на одинаковые квадратные сектора с координатами i, j. Возможно этого можно было добиться более цивильным способом...
Номер ответа: 8
Автор ответа:
merr
Вопросов: 11
Ответов: 31
Профиль | | #8
Добавлено: 27.07.12 15:29
Спасибо за пример
Номер ответа: 9
Автор ответа:
Mikle
Вопросов: 5
Ответов: 134
Профиль | | #9
Добавлено: 28.07.12 10:58
Пожалуйста. Но это просто я посмотрел твой код, понял, что требуется и исправил ошибки. Можно заметить, что уже на таком небольшом спрайте есть тормоза, если заменить Pset и Point на SetPixel, GetPixel, станет быстрее, но не на много, нужно всё делать в памяти, а на форму (битмап) выводить одной API функцией, например, как тут:
http://vbnet.ru/forum/show.aspx?id=218464