Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Относительное перемещение мыши

Автор: Felan
Дата сообщения: 17.03.2005 09:21
Есть Делфи 7 и оптическая мышь. Достоверно известно, что точность перемещения оптической мыши высочайшая! По крайней мере по бумажному листу при отключенных примочках винды, она запросто описывает замкнутый контур любой сложности, который умещается на листе а4 (суть такая, что на листе рисуешь контур, ведешь по нему мышь, а на экране рисуется он же и начало и конец идиеально совпадают).

Получение координат мыши в событиях канвы (проверял), или хуком (не проверял, но судя по изученным исходникам так и есть) уже несет отпечаток настроек винды.

Мне же надо получить относительно перемещение мыши (независимо от того, уперся курсор в край экрана или нет). Т.е. нужно отлавливать перемещение мыши! (а не курсора).

Насколько я понимаю, когда мышь сдвигается, возникает какое-то событие, которое обрабатывает драйвер. Из работы контроллера мыши известно, что он выдает смещение по x и по y (информация из datasheet на контроллер Agilent 2610, используемый в подопотной мышке). После того как драйвер распознает перемещение, он отдает смещение винде, и она рассчитывает положение курсора.

Если я прав, то как получить смещение, которое дает драйвер винде?
Если я не прав, то поясните, или дайте ссылочку где прочитать, как это все работает?

И самое главное, как получить смещение мыши, а не курсора?
Автор: Pentium133
Дата сообщения: 17.03.2005 11:17
Курсор - понятие програмное. Значит параметры можно получить програмно.
Мыша - понятие апаратное. Значит и средства нужны апартные. Напрмер какой-нибуть внешний датчик перемещения.
ИМХО вы перед собой поставили не логичную задачу. Зачем вам это?
Автор: SashKa
Дата сообщения: 17.03.2005 11:32
Конечно не самый бест вариант, но что то в этом есть:
предлагаю использовать DirectInput
Он кстати и возвращает по умолчанию относительное перемещение мыши.
И к тому же работает на прямую с драйвером (а может и с мышой сразу - не уточнял).
Да и край экрана для него не край



Добавлено:
Правда я не в курсе как сосуществуют Delphi7 и DirectInput
но вроде было что-то
Автор: Felan
Дата сообщения: 17.03.2005 11:56
Pentium133
Помоему вполне логичная. Мышь как-то передает информацию о своем смещении, на основании которой и рассчитывается положение курсора. Я хочу получить эту инвормацию в чистом виде, без посреднечества винды, т.к. она все портит своими аксерератороми и мастабированием (скорость перемещения курсора - не есть скорость перемещения мыши).

SashKa
А что такое DirectInput и где про него почитать, чет я в хепах не нашел ничего на эту тему.

Сорри, поторопился, вроде нашел инфу.

А кроме этого может еще какие возможности есть?
Автор: OdesitVadim
Дата сообщения: 17.03.2005 13:09

Цитата:
Достоверно известно, что точность перемещения оптической мыши высочайшая!

Чистой воды ложь, у хорошой механической мыши лучше. Как думаеш, почему многие проф. геймеры до сих пор сидят на шариковых - потомучто точность позиционирования у них выше. А у оптической может быть дефект на поверхности - и всё. К томуже точность позиционирования оптической мыши сильно зависит от частоты сканирования лишь в последнее время она стала достаточно высокой
Поехали дальше...
Ты явно хочеш обманывать Винду. Чтож, для этого нужно писать драйверок - проблематично. Можно пойти другим способом. Если мишь подключена к сом порту(так как она оптическая, то я сомневаюсь) можно осуществить чтение с сом порта протокол там сравнительно не сложен, за денёк осилить можно. (исходники работы с сом портом на делфи могу скинуть) если ты хочеш сделать альтернативное устройство ввода, то лучше использовать ещё одну мышь. (Да я понимаю, зверски выглядит машина с двумя крысаками, ничего у меня три стояло - одной я работал, другая - помогать человеку, который работает, а третья для игр - удобна очень. Между тем первые две были оптические, а последняя шариковая).
и на последок - не пиши одно и тоже в разных темах(http://forum.ru-board.com/topic.cgi?forum=33&topic=4831#1). модератор приймёт за флуд и накажет. Правила надо уважать прежде всего.
Автор: Felan
Дата сообщения: 17.03.2005 15:02
OdesitVadim

Цитата:
Чистой воды ложь, у хорошой механической мыши лучше

Спорить не буду, может просто в руках не деражал хорошую... Это к делу не относиться. Не важно, оптика или механика, вопрос в другом.


Цитата:
Если мишь подключена к сом порту(так как она оптическая, то я сомневаюсь)

Не, PS/2. С комом я работал, исходников не надо.
По поводу обмана винды... Ну раз надо, я не против только как это сделать?


Цитата:
Чтож, для этого нужно писать драйверок - проблематично

Вот тут бы исходничек был в самый раз... да с пояснениями...


Цитата:
не пиши одно и тоже в разных

Да я знаю, просто сначала туда написал, а потом подумал, что надо бы тему... А оттуда уже не сотрешь...
Автор: OdesitVadim
Дата сообщения: 17.03.2005 15:10
На делфе драйверок написать теоретически нельзя (правда как-то видел статью, где это делают).
ПОчему вам только исходнички и поставляй?

Если решать проблему с драйверами, то тогда под каждый тип мыши прийдётся писать свой. А также в каждом конкретном случае прийдётся настраивать мышь - так как соотношения перемещения, выдаваемого мишью поделеного на пройденое ею растояние даже в одной серии может расходиться

Скажи лучше для конкретно какой задачи нужно. Мож колесо изобретаеш новым способом?
Автор: MoKC0DeR
Дата сообщения: 17.03.2005 15:15
Felan

Цитата:
Вот тут бы исходничек был в самый раз... да с пояснениями...

А разве Microsoft DDK не содержит примерчиков ?
Автор: Felan
Дата сообщения: 18.03.2005 08:33
OdesitVadim
Почему нельзя? Раз где-то делают, значит можно!
Ну, сам понимашь, лучше один раз увидеть, вот поэтому исходники и рулят.

Пусть под каждый тип настраивать, я на не собираюсь это чудо в промышленных масштабах выпускать. Мне нужет один рабочий экземпляр. СРОЧНО! Поэтому и прошу исходники и задаю, возможно, глупые вопросы. Было бы время, сам бы разобрался.


Цитата:
Скажи лучше для конкретно какой задачи нужно. Мож колесо изобретаеш новым способом?


Надо мне это для того, что бы из мыши сделать датчик перемещения (каковым она вобщем-то и является). Действительно, просто датчик.

MoKC0DeR
Ага, еще одна купица, DDK. Возможно они там и есть, но для этого надо иметь сам DDK. Постараюсь найти.
Автор: SashKa
Дата сообщения: 18.03.2005 09:06
А все таки на мой взгляд использовать DirectInput намного проще чем писать драйвер, особенно если его ни разу не писал.

Мышь как устройство- она ведь тоже не относительное смещение в компьютер передает.
По моему идет последовательность импульсов (формат не знаю) и сидишь их разбираешь
(хотя может и просто все чем чаще тем быстрее движется)
Автор: Felan
Дата сообщения: 18.03.2005 11:49
SashKa
С DirectInput пока не разобрался, в основном все на C++... мне бы нарыть примерчик на Delphi!..
Путь импыльсы, готов считать, с форматом разберусь, инфу как-то видел в инете, а вот как добраться до них???

Из того, что видел на (примеры на C++) получается так, что насамом деле смещение мыши не бесконечно, оно так же упирается в край экрана, просто когда мышь используется, например, для кручения головой (т.е. курсора нет), после получения смещения, курсор насильно выставляется в центр экрана, и получается, что крутить ей можно бесконечно. С точки зрения программы, курсор не уходит от центра экрана больше чем на один отсчет.
Автор: OdesitVadim
Дата сообщения: 18.03.2005 14:27
Felan

Цитата:
Почему нельзя? Раз где-то делают, значит можно!

там только на 3 делфи, и с такими о граничениями и мутками, что можно посчитать просто ребята решили опровергнуть "истину".
Для Direct'a есть обвязка и для Делфи(гдето на форуме ссылочка была) - если найдёш пример на С, то его можно будет перевести и на Делфи.
Если тебе надо один рабочий пример, то почему бы не взять ещё одну сом-мышь - тогда всё достаточно легко решается
А задачу ты так и не сформулировал. Что конкретно должен делать твой "датчик перемещения"?
Автор: Felan
Дата сообщения: 18.03.2005 18:37
OdesitVadim

Цитата:
Для Direct'a есть обвязка и для Делфи(гдето на форуме ссылочка была) - если найдёш пример на С, то его можно будет перевести и на Делфи.

В понедельник поищу.


Цитата:
Если тебе надо один рабочий пример, то почему бы не взять ещё одну сом-мышь - тогда всё достаточно легко решается
А задачу ты так и не сформулировал. Что конкретно должен делать твой "датчик перемещения"?


Потому, что нет оптических комовских, к тому же, на ноутбуках нет ком-портов.

Задачу я сформулировал! Хочешь подробности? Их есть у меня! Хоть и не все конечно.
Есть определенный промышленный прибор, с которым я работаю над кандидатской. Он переносной, и должен работать с переносным компом (читай ноутбук). К этому прибору нужет натчик 2Д относительного перемещения, который должен быть конструктивно оформлен в одно целое с датчиком прибора.
Дело в том, что нет железячника, который сделал бы это почеловечески (выдрал контролллер из мыши, совместил его с датчиком прибора, и предоставил мне интерфейс). Я только программист, и то, еще далеко не сильно крутой, а с железом темболее никак.
Времени очень мало, предельно мало. Мне пришла в голову мысль, что бы снимать данные параллельно. Т.е. датчик прибора гонит свои данные по Com, в это время читается положение мыши и уже я программно над ними че хочу, то и ворочу.
Шариковую мышь не предлогать. Не знаю, что там у геймеров, но у меня все мыши, которые были ездили сносно, но не точно.
Автор: vitls1
Дата сообщения: 20.03.2005 10:21
почему бы не завязать это на USB мышь. Насколько я помню, в HID (Human Interface Device) интерфейс мышки, как раз и передает относительное перемещение со времени последнего опроса. А по этой теме в интернете инфы, в то числе и исходников - завались.
Автор: Felan
Дата сообщения: 20.03.2005 13:37
vitls1

Цитата:
USB мышь

Вариант, конечно... но хотелось бы с ps/2.

Страницы: 1

Предыдущая тема: Как на Delphi удалить файл, блокируемый другой прогой


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.