Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.04.2009, 08:46
gadmaker gadmaker вне форума
Прохожий
 
Регистрация: 19.04.2009
Сообщения: 49
Репутация: 10
По умолчанию колёсико мышки

Подскажите пожалуйста как уловить событие движение колёсика мышки.
Разыскал вот такую функцию но она не срабатывает:

function GetNumScrollLines: Integer;
begin
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @Result, 0);
end;
Ответить с цитированием
  #2  
Старый 25.04.2009, 09:37
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Вы пишете программу на Win32 API?
Если нет, то, вообще говоря, в объектном инспекторе для формы можно найти события OnMouseWheel, OnMouseWheelDown, OnMouseWheelUp.
А если всё же пишите на Win32 API, то в оконной процедуре нужно просто среди прочего добавить реакцию на событие WM_MOUSEWHEEL.

P.S. А та функция, что вы показали, просто возвращает количество строчек, прокручиваемых при однократном вращении колесика.
Ответить с цитированием
  #3  
Старый 25.04.2009, 15:58
gadmaker gadmaker вне форума
Прохожий
 
Регистрация: 19.04.2009
Сообщения: 49
Репутация: 10
По умолчанию

Моя программа запускается через консоль, затем по средствам кода создаётся форма, настраевается и на неё накладывается DirexX движок вполне вероятно что сам движок имеет также собственную форму. Пожалуйста опишите по подробнее как можно улавливать вращения колёсика.
Ответить с цитированием
  #4  
Старый 25.04.2009, 16:20
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Если у тебя DerectX движек, то мышь там имеет 3-оси, x, y, z, последний как правило - колесо.
Если нет, то просто подмени оконную процедуру, окна своего движка и перехватывай WM_MOUSEWHEEL
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #5  
Старый 25.04.2009, 16:40
gadmaker gadmaker вне форума
Прохожий
 
Регистрация: 19.04.2009
Сообщения: 49
Репутация: 10
По умолчанию

Как работает WM_MOUSEWHEEL поясните пожалуйста?
Ответить с цитированием
  #6  
Старый 25.04.2009, 16:53
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Код:
type  
  TWndProc = function (Wnd : HWND; msg : Cardinal; wParam, lParam : Integer) : Integer; stdcall;

var
  NextWindowProc : TWndProc;//Сюде сохраняем указатель на старую оконную процедуру
  
function WndProc(Wnd : HWND; msg : Cardinal; wParam, lParam : Integer) : Integer; stdcall;
begin
  case msg of
    WM_MOUSEWHEEL :
      begin
        //Обрабатываешь тут
        //если ошибюсь, то hiword(wParam) - и есть нужный тебе параметр

        //На всякий случай пеередаем управление оригинальному обработчику
        Result := NextWindowProc(wnd, msg, wParam, lParam);
      end;  
    else
      Result := NextWindowProc(wnd, msg, wParam, lParam);
  end; 
end;

//эта функция уситанавливает WndProc в качестве оконной процедуры
procedure SetnyWndProc(handle : hwnd);  
begin
  if IsWindow(handle) then  
    NextWindowProc := Pointer(setWindowLong(handle, GWL_WNDPROC, Integer(@WndProc)));
end.
Тебе только нужно узнать handle своего окна. Да, это естественно работает только если окно существует в том же процессе.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #7  
Старый 26.04.2009, 06:42
gadmaker gadmaker вне форума
Прохожий
 
Регистрация: 19.04.2009
Сообщения: 49
Репутация: 10
По умолчанию

Спасибо 0nni за предложенную конструкцию признаю тяжеловато мне здесь пока разобраться но буду пробовать
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:09.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025