Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.11.2012, 18:57
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию Движение курсора под углом

Доброго времени суток. Есть вопрос, допустим есть угол 20°, нужно чтоб под таким же углом двигался курсор.
Ответить с цитированием
  #2  
Старый 21.11.2012, 19:41
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Под углом 20 градусов к чему? К плоскости монитора?
А если серьёзно - простейшая геометрическая задачка на синусы и косинусы. Зная гипотенузу и угол, посчитать катеты (x и y) и прибавить к текущим координатам эти самые x и y.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 21.11.2012, 21:14
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Ага, ну с движением через setcursorpos получается, а вот через mouse_event курсор улетает в небытие. Если пробовать так
Код:
Pt := ClientToScreen(Pt);
  
  Pt.x := Round(Pt.x * (65535 / Screen.Width));
  Pt.y := Round(Pt.y * (65535 / Screen.Height));
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, pt.x, pt.y, 0, 0);
то я не смогу передвинуть курсор в другое место. Как мне переделать под
Код:
Mouse_Event(MOUSEEVENTF_MOVE, pt.x, pt.y, 0, 0);
Ответить с цитированием
  #4  
Старый 21.11.2012, 21:17
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Че-то я вообще не понял. Допустим, у нас ширина экрана -1280 пикселей. Курсор в точке 100 по X. Новая точка получается 5120, что мягко говоря далеко за экраном. Или же я не понимаю, что это за Pt изначально.
В чем смысл этого кода?
Если надо просто двигать, то надо получить текущую позицию, прибавить к ней нужное значение и установить.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 21.11.2012, 21:34
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Цитата:
что это за Pt изначально
В данном случае это у меня переменная TPoint.
Цитата:
В чем смысл этого кода?
Через
Код:
Mouse_Event(MOUSEEVENTF_MOVE, pt.x, pt.y, 0, 0);
мне просче передвинуть курсор не запоминая начальные координаты. При этом pt.x и pt.y будут постоянными до тех пор пока не изменится угол.
Ответить с цитированием
  #6  
Старый 21.11.2012, 21:39
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Тогда передвигай на небольшие значения, а не на тысячу пикселей за раз. Откуда взялось * (65536/Screen.Width)?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 21.11.2012, 21:42
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Цитата:
Откуда взялось * (65536/Screen.Width)?
Отсюда http://www.delphisources.ru/pages/fa...emulation.html
Ответить с цитированием
  #8  
Старый 21.11.2012, 21:56
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Хм, не знал, что моусэвент принимает нормализованные координаты.
Как инициализируется точка Pt?
Да, кстати. Можно использовать SendInput, она более вменяемая в этом плане:
Цитата:
Сообщение от msdn
...Absolute data is specified as the x coordinate of the mouse; relative data is specified as the number of pixels moved.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 22.11.2012, 00:08
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Pt точку я взял из примера с mouse_event, в исходнике она у меня не пременяется. Если что-то не понятно вот исходник.
Вложения
Тип файла: 7z движение под углом.7z (7.0 Кбайт, 3 просмотров)

Последний раз редактировалось Klyaksa, 22.11.2012 в 00:10.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter