Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
Вроде получилось :)

  1.  
  2. Private Sub PIC_MouseMove(button As Integer, Shift As Integer, x As Single, y As Single)
  3. If button = 1 Then
  4.    For i = Int(x) To Int(x)
  5.         For j = Int(y) To Int(y)
  6.         ...Операторы
  7.         Next j
  8.    Next i
  9. End If
  10. End Sub



Теперь пытаюсь запихать в процедуру для мыши переменную из события для кнопки (KeyPress) чтоб при нажатии клавиши и зажатой кнопке + движении мыши все это обрабатывалось по-другому. Но вылезает ошибка о несоответствии процедуры ее описанию. Видимо невозможно впихнуть невпихуемое...процедура для мыши не приемлет никаких аргументов кроме собственных? Параметры процедуры мыши в процедуру для клавы тоже не принимаются. И те и другие параметры в 3-ю "обычную" процедуру тоже никак - или одни или другие - иначе "Argument not optional". Люди, подскажите как объединить параметры клавы и кнопок "под одной крышей"

Ответить

Номер ответа: 5
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #5 Добавлено: 27.07.12 12:28
Да, в примере забыл в начале строки
  1.  
  2. Dim i As Integer
  3. Dim j As Integer

Ответить

Номер ответа: 6
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #6 Добавлено: 27.07.12 14:43
For i = Int(x) To Int(x)
   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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам