Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как сделать чтобы при нажатии на мыщь выводился Добавлено: 12.12.08 07:56  

Автор вопроса:  Али
Всем добрый день! Подскажите пожалуйста?
Как сделать чтобы при нажатии на мыщь выводился специальное область выделения, ну например как на рабочем столе Windows, нажимаеш левую и не отпуская выделяешь объекты. Чтобы при нажатии и перемещении выводился пунктирный, прозрачный прымоугольник.

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #1 Добавлено: 12.12.08 12:12
рисовать вручную - нажал кнопку нарисовал начало прямоугольника - сдвинул - перерисовал - кстати - на чем VB6 or NET?

Ответить

Номер ответа: 2
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #2 Добавлено: 12.12.08 13:28
  1.     Private rc As Rectangle
  2.     Private Function MyNormalizeRect(ByVal r As Rectangle) As Rectangle
  3.         If (r.Width < 0) Then
  4.             r.X = r.X + r.Width
  5.             r.Width = -r.Width
  6.         End If
  7.         If (r.Height < 0) Then
  8.             r.Y = r.Y + r.Height
  9.             r.Height = -r.Height
  10.         End If
  11.         MyNormalizeRect = r
  12.     End Function
  13.  
  14.     Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
  15.         If (Not rc.IsEmpty) Then System.Windows.Forms.ControlPaint.DrawFocusRectangle(e.Graphics, MyNormalizeRect(rc))
  16.     End Sub
  17.  
  18.     Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
  19.         rc.X = e.X
  20.         rc.Y = e.Y
  21.         rc.Width = 0
  22.         rc.Height = 0
  23.     End Sub
  24.  
  25.     Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
  26.         If (Not rc.IsEmpty) Then
  27.             rc.Width = e.X - rc.X
  28.             rc.Height = e.Y - rc.Y
  29.             Invalidate()
  30.         End If
  31.     End Sub
  32.  
  33.     Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
  34.         rc = rc.Empty
  35.         Invalidate()
  36.     End Sub

Ответить

Номер ответа: 3
Автор ответа:
 Али



Вопросов: 27
Ответов: 43
 Профиль | | #3 Добавлено: 15.12.08 07:48
А как сделать, чтобы объекты внутри области оказались выделенными?

Ответить

Номер ответа: 4
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #4 Добавлено: 15.12.08 11:42
опять-же - вручную - определять область выделения (она у тебя есть), какие объекты туды входят и каким-то макаром выделять - толи цвет менять на время выделения толи еще както... например обрисовывать по контуру линиеей пунктирной красной...

Ответить

Номер ответа: 5
Автор ответа:
 Али



Вопросов: 27
Ответов: 43
 Профиль | | #5 Добавлено: 16.12.08 13:44
Чтото не получается?

Ответить

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



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #6 Добавлено: 16.12.08 15:18
что представляют собой эти выделяемые объекты?
желательно чтоб это были твои контролы, у которых будет какоето общее свойство - Center (центр объекта) - тогда ты можешь определить где он находиться - внутри выделенной области или нет (она-то прямоугольная), или же функция с параметром Restangle (твой регион) - возвращает True Or False, в зависимости от того где находиться центр, как и в предыдущем случае
Тут лучше сразу распределить свойства и события которые должны принадлежать контролу, а какие обрабатываться снаружи
В контроле создать переменную чтото вроде
Bool _Selected = False;
при попадании в выделенную область ставишь его в True, и перегружаешь событие Paint -
if (_Selected =True)
    цвет = красный;
else
    цвет = нормальный какойто
Тут можно поэксперемнтировать - как будет Paint отрабатывать - если плохо - то вызывать принудительно по каждому клику у каждого контрола функцию перекрашивания...

Ответить

Номер ответа: 7
Автор ответа:
 Али



Вопросов: 27
Ответов: 43
 Профиль | | #7 Добавлено: 17.12.08 11:14
Я бы хотел этот область выделения вывести в объекте PictureBox и выделить некоторое область рисунка?

Ответить

Номер ответа: 8
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #8 Добавлено: 17.12.08 13:06
блин...
напиши толком что ты делаешь, что у тебя в пикчербоксе? - ты там рисунки вставляешь? тогда геморой - попиксельно лазить по всему рисунку и напрямую с памятью работать... может тебе чтото нужно кардинально менять... что вообще хочешь сделать... я в свое время начал делать одну штуку, чтото такого: на форме находяться различные компоненты объекты - свои контролы, смысл которых сводиться к отображению какойто диаграммы, они соединяются линией связи, перемещать просто и обрабатывать события... правда проект только в начальном состоянии т.к. кризис и договор накрылся медным тазом

Ответить

Номер ответа: 9
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #9 Добавлено: 17.12.08 13:09
вернее не диаграммы а схемы... т.к. юзерконтрол прямоугольный, то пришлось обрзку каждого элемента делать по русунку... - отсекал белый фон своим редактором и т.д. если интересно...

Ответить

Номер ответа: 10
Автор ответа:
 Али



Вопросов: 27
Ответов: 43
 Профиль | | #10 Добавлено: 17.12.08 13:36
Пишу подробнее: Да нужно в объекте PictureBox был рисунок при выделении некоторый область этого рисунка в другом объекте DataGridView выделялся соответствующие данные.

Ответить

Страница: 1 |

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



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