Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мышкино колёсико, как отловить его вращение? 
:(
    Опции темы
EKoshelev
  Дата 13.10.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



У меня Delphi 5
Хотелось бы знать как отловить вращение колёсика мышки. По факьюшкам, помнится, рылся, дак там только его наличие можно было выявить. А ещё я тут глумлюсь над StringGrid'ом и мне не нужно чтобы маркер ползал от колеса. Может быть его и перехватить можно как-нибудь?

Всем заранее спасибо.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Akella
Дата 13.10.2004, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



здается мне, что нужно добавлять событие к компоненте TStringGrid OnMouseWheel, такое как в DBGrid`е
PM MAIL   Вверх
Snowy
Дата 13.10.2004, 16:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Какие ужасные проблеммы... В Delphi 7 есть стандастные события: OnMouseWheel, OnMouseWheelUp, OnMouseWheelDown.

Если конечно хочется помучиться, то придется отслеживать сообщения форме.
Ждать сообщения WM_MOUSEWHEEL. Оно тебе заодно и скажет, куда крутить: вверх или вниз. Только оно работает не во всех версиях Win. В >=2k работает точно. Про остальные не скажу.
  Вверх
Akella
Дата 13.10.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
Какие ужасные проблеммы... В Delphi 7 есть стандастные события: OnMouseWheel, OnMouseWheelUp, OnMouseWheelDown.

в TStingGrid нету
PM MAIL   Вверх
bartram
Дата 13.10.2004, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Snowy, зарегистрируйся раз такие полезные сообщения даёшь! smile.gif



--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Snowy
Дата 13.10.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Точно, поправочка. У StringGreed нет OnMouseWheel. Есть только OnMouseWheelUp, OnMouseWheelDown. Хотя это не многое меняет. Однако было бы полезно ловить именно сообщения формы, а не грида, т.к. грид и сам по колесу двигает ползунок, а вот, если фокус не на гриде, то в данном случае скролить область грида, а не позицию. Хотя можно совместить полезное с приятным и просто посадить на форму TApplicationEvents. А у него уже следить, что:

if Msg.Message=WM_MOUSEWHEEL then
if Msg.lParam<0 then вверх
else вниз;

В данном случае будет работать везде.
PM MAIL   Вверх
z-END
Дата 8.2.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Цитата(Snowy @ 13.10.2004, 17:06)
if Msg.Message=WM_MOUSEWHEEL then
if Msg.lParam<0 then вверх
else вниз;

Это точно рабочий пример?! нет, я не-то чтобы не верю Snowy, просто щас на компе проверял, там lParam меняется только если координаты гызуна сдвинулсь, а реально данные находятся в wParam с точночтью до наоборот т.е. <0 значит вниз >0 наверх.
Может быть у меня с компом че-то? т.к. уже столкнулся с тем что он как-то неесовсем правильно работает. см. тут


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 9.2.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Конечно нет. Что-то я ляпнул на скорую руку не подумавши.
Рабочий код такой:
Код

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if Msg.Message=WM_MOUSEWHEEL then
   if Msg.wParam>0 then вверх
   else 'вниз';
end;

PM MAIL   Вверх
BukaKoka
  Дата 24.10.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.9.2009

Репутация: нет
Всего: нет



Отловить та отловили всё хорошо.
Но мне надо програмно покрутить им как это сделать. Какие функции здесь нужны?

Спасибо.
PM MAIL   Вверх
v258
Дата 24.10.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 19.7.2005
Где: Краснодарский кра й

Репутация: 2
Всего: 2



Цитата(BukaKoka @  24.10.2009,  13:23 Найти цитируемый пост)
Но мне надо програмно покрутить им как это сделать. Какие функции здесь нужны?

Я делал так (для Memo)
Код

    procedure WMMouseWheel(var Mes: TWMMouseWheel); message WM_MOUSEWHEEL;

------------------------------------------

{Реакция на прокрутку колесика мыши}
procedure TForm4.WMMouseWheel(var Mes: TWMMouseWheel);
var
  i,j,p: integer;
begin
  if IsCursor then
    {Если курсор находится над текстом, то начать прокрутку}
    begin
      {Определить направление прокрутки}
      if Mes.WheelDelta < 0 then
        p := SB_LINEDOWN else
        p := SB_LINEUP;
      {Определить диапазон прокрутки за один щелчок колесика - системная настройка}
      SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @j, 0);
      {Если получено значение -1, то прокручивать на целую страницу}
      if j < 0 then
        begin
          j := 1;
          p := p + SB_PAGEUP;
        end;
      {Послать заданное количество сообщений на прокрутку}
      for i := 1  to j do
        Memo1.Perform(WM_VSCROLL,p,0);
    end;
end;

PS: IsCursor - функция для определения положения курсора, над Мемо он находится или нет 

Это сообщение отредактировал(а) v258 - 24.10.2009, 19:53
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.