Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Чапаев ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
15-1170415685
ТуцГыук
2007-02-02 14:28
2007.02.25
Linux


2-1170838885
fart
2007-02-07 12:01
2007.02.25
массивы и сторки


15-1170427969
крек
2007-02-02 17:52
2007.02.25
Ну как открыть ps файл???


1-1168108827
Sleepeer
2007-01-06 21:40
2007.02.25
Работа с MD и ERT файлами 1Сv77 напрямую - без плагинов в дельфи


2-1170759824
inkvizitor
2007-02-06 14:03
2007.02.25
stringgrid ->excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский