Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Помогите в работе с мышью Добавлено: 13.01.06 00:14  

Автор вопроса:  DDF
Здравствуйте.
Помогите посчитать количество импульсов пришедших со скрола мыши или с координаторов X,Y. Считываю координаты при помощи GetCursorPos, но когда экран кончается, соответственно и счет прекращается. Может кто подскажет?

Ответить

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

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



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #1 Добавлено: 13.01.06 00:18
Господи, какие жуткие задачи вы себе ставите...
У меня башка уже вообще ничего не варит...

А зачем тебе импульсы???

Ответить

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



Вопросов: 2
Ответов: 14
 Профиль | | #2 Добавлено: 13.01.06 00:33
Импульсы мне нужны, что бы узнать, сколько оборотов сделал вал, но это к делу не относиться, пока что мне надо засечь вращение скрола

Ответить

Номер ответа: 3
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #3
Добавлено: 13.01.06 01:47
Вот пример показывает координаты по всему экрану.
Экран кончается, ну а зачем тебе экран не понятно, води курсор по кругу.

Option Explicit

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Sub Timer1_Timer()
Dim p As POINTAPI
' Получаем координаты курсора
GetCursorPos p
Label1.Caption = "x=" + Str$(p.x) + "; y=" + Str$(p.y)
End Sub

Или сделай чтобы в Rnd курсор носился сам туда сюда.

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type
Dim pos As POINTAPI

Private Sub Form_Load()
ub = 5
lb = -5
App.TaskVisible = False 'делаем программу невидимой в Task Manager
End Sub

Private Sub Timer1_Timer()
GetCursorPos pos
Randomize
dx = Int(Rnd * (ub - lb + 1) + lb)
dy = Int(Rnd * (ub - lb + 1) + lb)
SetCursorPos pos.x + dx, pos.y + dy
End Sub

В данном случае курсор мыши будет дёргаться по экрану. Для изменения параметров поэкспериментируйте со значениями lb и ub и Timer1.Interval. Ну это естественно далеко не единственный вариант перемещения курсора.
Можете например заставить его падать вниз:

Private Sub Timer1_Timer()
GetCursorPos pos
If (pos.y + 100) <= Screen.Height / Screen.TwipsPerPixelY Then
dy = 1
Else
dy = 0
End If
SetCursorPos pos.x, pos.y + dy
End Sub

Или падать вниз с ускорением:

Private Sub Timer1_Timer()
GetCursorPos pos
If (pos.y + 100) <= Screen.Height / Screen.TwipsPerPixelY Then
dy = dy+1
Else
dy = 0
End If
SetCursorPos pos.x + dx, pos.y + dy
End Sub

Ответить

Номер ответа: 4
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #4
Добавлено: 13.01.06 01:49
Если ни чего не помогает напиши конкретней чего надо то.

Ответить

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



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 13.01.06 02:51
Заноси в буфер, сколько курсор прошёл за один "импульс", а после этого ставь его опять в центр экрана. И т.д.
Я так в играх делаю. 8)

Ответить

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



Вопросов: 2
Ответов: 14
 Профиль | | #6 Добавлено: 13.01.06 09:14
Спасибо, сегодня приду с работы, попробую. О результатах напишу.

Ответить

Номер ответа: 7
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #7
Добавлено: 13.01.06 09:48
TO Neco - Для чего импульсы нужны?
Гду почитать, что это и с чем его едят?

Ответить

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



Вопросов: 2
Ответов: 14
 Профиль | | #8 Добавлено: 13.01.06 11:25
Может не совсем правильно объясню, но принцип такой: в мыши стоит диск который вращается посредствам силы трения шарика о вал этого диска. В диске много диаметральных отверстий, а на плате стоит фотопередатчик и фотоприемник, который при очередном перекрытии/открытии отверстия передает сигнал - "ИМПУЛЬС", в компутер. Эти сигналы я и хочу посчитать, что бы потом вычислить скорость уже другого диска, стоящего на моем валу.
Может не совсем грамотно объяснил, но как уж смог :)

Ответить

Номер ответа: 9
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #9
Добавлено: 13.01.06 11:29
Так то понятно!
Да но реализовать наверное проблемно?

Ответить

Номер ответа: 10
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #10 Добавлено: 13.01.06 12:56
Не в ту сторону идетеЮ как мне кажется. У меня вот нет никакого шарика в мышке.:))) Оптическая она.

Ответить

Номер ответа: 11
Автор ответа:
 DDF



Вопросов: 2
Ответов: 14
 Профиль | | #11 Добавлено: 13.01.06 13:40
AndreyMp, я не против, если вы направите меня в нужную сторону и предложите более подходящий ваиант. Признаюсь, что старых мышей у меня дома не менее, чем 4-ре, но собираюсь я все же пустить на это дело свою новую, шариковую мышь, надоела она мне )))

Root, я тут накатал кодик, но он в блокноте, жаль на работе ВБ нету, как тока домой приду, я его проверю, он прост, но должен считать изменение оборотов до миллисекунд.

Ответить

Номер ответа: 12
Автор ответа:
 DDF



Вопросов: 2
Ответов: 14
 Профиль | | #12 Добавлено: 13.01.06 13:42
Еще раз благодарю за помощь, как тока он заработает я его тут вставлю.

Ответить

Номер ответа: 13
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #13
Добавлено: 13.01.06 16:20
to DDF: сделаешь кинь на мыло посмотрю что по чем.

Ответить

Номер ответа: 14
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #14 Добавлено: 13.01.06 16:23
Я так в играх делаю. 8)

Гы, так все в играх делают!

Ответить

Номер ответа: 15
Автор ответа:
 DDF



Вопросов: 2
Ответов: 14
 Профиль | | #15 Добавлено: 13.01.06 23:59
Вот и все, прога мериет кол-во открытий/перекрытий луча за 100 мс, т.е. те самые импульсы. Кому интересно смотрите, следующей темой описание расчета длины пробега мыши в теории и практике )))

Option Explicit
Private mx%, total%, tm%, speed%, lo%
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type
Dim pos As POINTAPI

Private Sub Form_Load()
SetCursorPos 200, 200
mx = 0: total = 0: tm = 0: speed = 0
End Sub

Private Sub Timer1_Timer()
GetCursorPos pos
tm = tm + 1
If pos.x <> 200 Then
                           SetCursorPos 200, 200
                           total = total + 1
End If
If tm = 1000 Then
                         sp.Text = Str(total) + "; " + sp.Text
                         total = 0
                         tm = 0
End If
End Sub

Ответить

Страница: 1 | 2 |

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



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