Текущий архив: 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]«Как бы сделать так, чтобы при „проезде“ »
Имхо с координатами сложно. Надо менять настройки мыши. Там есть скорость…
← →
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.49 MB
Время: 0.048 c