Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 15:42   #1
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
Сообщение Манипуляции с мышью

Уважаемые скилованные программисты! Возможно ли в приложении изменить поведение мыши, а именно:

1). замедлить ее движение, т.е. ограничить скорость передвижения по форме приложения, даже при резком движении мышью, ее скорость будет ограничена каким-либо значением;
2). Заменить стандартный курсор мыши графическим изображением;
3). Задать области в приложении, границы которых курсор пересечь не сможет.

Было бы весьма любопытно взглянуть на примеры решения данных ситуаций в таких средах как: VS C++ 2010, Borland Delphi 7.
halcyon вне форума Ответить с цитированием
Старый 27.09.2011, 18:34   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

2)
Код:
const
  crUsual = 5;
...
procedure LoadCursors ();
begin
  Screen.Cursors[crusual] := LoadCursorFromFile(PAnsiChar(apppath+'graf\usual.ani'));  
end;
...
Screen.Cursor := crusual;
Я использую данный способ при наличии файла курсора (*.cur, *.ani)

Просто для рисования картинки вместо курсора:
Код:
Screen.Cursor := crNone;
...
procedure TForm1.timer1timer(Sender: TObject); // событие таймера 
begin
// формирование предыдущей части кадра
...
canvas.draw(x,y, cursorpicture); // cursorpicture - созданная вами картинка для курсора
end;
Как-то так, экспериментируйте

Насчёт 1 и 3 - точно ли данные методы нужны ? может есть что более удобное для юзера и для Вас как программиста
phomm вне форума Ответить с цитированием
Старый 27.09.2011, 19:57   #3
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

1) Можно считать изменение позиции мыши dl (это вектор) за 1 ""тик" таймера,
Код:
 если модуль(dl)>a
(a - ограничение скорости), то необходимо вернуть курсор немного назад:
Код:
x:=x-перемножить(орт(dl),длина(dl)-a).x
3) если область прямоугольная, то можно делать проверку: вошёл ли курсов в эту облать. А если вошёл, то вытолкнуть его по нормали на поверхность. Данный способ будет плохо работать при быстром движении мыши. Ничего другого в голову так сразу не приходит
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 29.09.2011, 14:42   #4
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Андрей 93 Посмотреть сообщение
1) Можно считать изменение позиции мыши dl (это вектор) за 1 ""тик" таймера,
Код:
 если модуль(dl)>a
(a - ограничение скорости), то необходимо вернуть курсор немного назад:
Код:
x:=x-перемножить(орт(dl),длина(dl)-a).x
было бы любопытно посмотреть на более развернутую мысль
halcyon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Манипуляции с формой Claster Помощь студентам 6 11.04.2011 11:49
Манипуляции с ненумерованным списком 25mute HTML и CSS 1 31.01.2011 12:05
манипуляции в StringGrid начинающий1 Общие вопросы Delphi 11 25.08.2010 14:44
избавиться от лишней манипуляции Iskin Microsoft Office Excel 30 09.12.2008 09:39
Манипуляции с датой в запросе Arkuz БД в Delphi 8 11.11.2008 23:23