Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Затормозить мышку   Найти похожие ветки 

 
Чапаев ©   (2006-12-27 20:29) [0]

Как бы сделать так, чтобы при "проезде" курсора мышки над контролом её движение "замедлилось"? Пытался в обработчике OnMouseMove делать что-то вроде NewX:=OldX+DeltaX div 2, но при этом курсор или не передвигается вообще, если мышку двигать плавно, или сразу выскакивает за пределы контрола, если двигать резко.


 
TStas ©   (2006-12-28 01:35) [1]

SetMousePos? Только что Вы подразумеваете под "замедлилось"?


 
Чапаев ©   (2006-12-28 08:25) [2]

> SetMousePos
SetCursorPos()


> Только что Вы подразумеваете под "замедлилось"?
Хотелось бы, чтобы над данным контролом курсор передвигался на один пиксель при таком физическом передвижении мышки, которое бы в остальной части экрана передвигало курсор на два (три, четыре, ...) пикселя. Как понятней объяснить, не знаю.


 
Орион ©   (2006-12-28 09:01) [3]

> [0] Чапаев ©   (27.12.06 20:29)

хуком попробуй.


 
Evgeny V ©   (2006-12-28 09:09) [4]

SystemParametersInfo (возможно, ибо сам не пробовал)


 
Чапаев ©   (2006-12-28 10:02) [5]

> [3] Орион ©   (28.12.06 09:01)
А чем это поможет? Передвижение мышки я и так ловлю. Но вот как его "замедлить" -- идей нету...

> [4] Evgeny V ©   (28.12.06 09:09)
Судя по описанию, может помочь... Буду пробовать.


 
Котик Б   (2006-12-28 11:19) [6]

А вы не думаете о том - что пользователь встретившийся со столь необычной заботой о себе - вашу программку сразу же сотрет ???


 
Орион ©   (2006-12-28 13:35) [7]

> [5] Чапаев ©   (28.12.06 10:02)

тебе в процедуру обработки будут приходить координаты курсора, вот их и меняй.


 
megabyte-ceercop ©   (2006-12-28 14:10) [8]

NewX:= OldX + ((float)DeltaX / 2.0)

сделай OldX типом float

Проблема похоже из-за округления при делении.


 
Elen ©   (2006-12-28 15:27) [9]


> Проблема похоже из-за округления при делении.

Проблема скорее из-за того что если автор пользуется SetCursorPos, то тот при выполнении вызывает OnMouseMove, т.е. зацикливание такое происходит пока мышка за пределы контрола не выдвинется.


 
Elen ©   (2006-12-28 15:36) [10]


> Чапаев

Вот :

Для того, чтобы изменить скорость перемещения мыши воспользуйтесь следующим кодом:
SystemParametersInfo(SPI_SETMOUSESPEED,0,pointer(5),SPIF_SENDCHANGE); // где 5 - скорость. (по умолчанию - 10)


 
Джо ©   (2006-12-28 15:39) [11]

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


 
Elen ©   (2006-12-28 15:41) [12]

Удалено модератором
Примечание: Флудить завязываем


 
Чапаев ©   (2006-12-29 19:21) [13]

> [9] Elen ©   (28.12.06 15:27)
Нет

> [11] Джо ©   (28.12.06 15:39)
Я их хочу изменить для единственного контрола и то -- только на время нахождения над ним курсора.


 
Kolan ©   (2006-12-29 21:12) [14]

«Как бы сделать так, чтобы при „проезде“ »

Имхо с координатами сложно. Надо менять настройки мыши. Там есть скорость&#133


 
Eraser ©   (2006-12-30 00:03) [15]

> [13] Чапаев ©   (29.12.06 19:21)

надо производную от перемещения по времени взять, а потом уменьшить ))

а если серьезно то можно поиграться с SetCursorPos, но там не очень простой алгоритм получится и мыша можеть дергаться... всмысле её указатель )


 
Piroxyline ©   (2006-12-30 11:47) [16]

По GetCursorPos бери позицию курсора, от координат отнимай старые координаты, дели на 2 и прибавляй старые - получишь замедление в 2 раза.


 
Чапаев ©   (2006-12-30 12:49) [17]

Короче, [10] -- самое оно. ;-)


 
-DeBUGGeR- ©   (2006-12-30 12:54) [18]

Полубому нужно менять скорость перемещения мыши в системе над контролом, а когда курсор мыши "уйдет с контрола" вернуть настройки обратно.
Если мутить темы с координатами, то мышь начнет дергаться и вообще последствия будут не красивыми (ИМХО).

к примеру с кнопкой Button1 )):

// Обработчик когда курсор над кнопкой
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 SystemParametersInfo(SPI_SETMOUSESPEED,0,pointer(2),SPIF_SENDCHANGE);
end;
// Обьработчик когда курсор над формой
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 SystemParametersInfo(SPI_SETMOUSESPEED,0, pointer(13) ,SPIF_SENDCHANGE);
end;

---------------
все просто прекрасно работает....
Но есть одно НО: надо сделать глобальную переменную и туда сохранять скорость мыши в системе... И когда курсор над формой (или при закрытии ! На всякий случай) ставить "старую" скорость перемещения мыши.


 
Чапаев ©   (2006-12-30 13:11) [19]

> [18] -DeBUGGeR- ©   (30.12.06 12:54)
:-) так и сделал... "Прелесть" в том, что для получения скорости надо передавать @MouseSpeed, а для установки -- Pointer(MouseSpeed). Пока я допёр...



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
15-1170016567
i-am-vladko
2007-01-28 23:36
2007.02.25
Assembler


6-1158231851
Alexander_K
2006-09-14 15:04
2007.02.25
Как программно подконнектится?


2-1170770619
FIL-23
2007-02-06 17:03
2007.02.25
как подключить шрифт?


4-1161024235
spok
2006-10-16 22:43
2007.02.25
Процесс от имени другого юзера - как? (почему не работает?)


1-1168249906
i-am-vladko
2007-01-08 12:51
2007.02.25
проблемы с созданием компонента