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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие на прокрутку колесика мыши, WM_??? =))) 
:(
    Опции темы
DragonFire
Дата 20.2.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не подскажет кто-нибудь?


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


Эксперт
****


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

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



WM_MOUSEWHEEL
Добавлено @ 12:51
Пример использования: http://forum.vingrad.ru/index.php?showtopi...st&p=647038
PM MAIL   Вверх
DragonFire
Дата 20.2.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо smile


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


Опытный
**


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

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



Посмотрел я и что-то у меня не пашет smile
Почему не работает такой код:
Код

WM_MOUSEWHEEL: begin
    if HIWORD(WParam)-WHEEL_DELTA>0 then ZScroll:=ZScroll-1
    else ZScroll:=ZScroll+1;
end;



--------------------
PM MAIL ICQ   Вверх
Romikgy
Дата 20.2.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

WM_MOUSEWHEEL: begin
    if ((HIWORD(WParam)-WHEEL_DELTA)>0) then ZScroll:=ZScroll-1
    else ZScroll:=ZScroll+1;
end;

Мож так будет работать?
Добавлено @ 15:54
Код

WM_MOUSEWHEEL: begin
    if (abs(HIWORD(WParam))>WHEEL_DELTA) then ZScroll:=ZScroll-floor(HIWORD(WParam)/WHEEL_DELTA)
    else ZScroll:=ZScroll+floor(HIWORD(WParam)/WHEEL_DELTA);
end;

smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 20.2.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Только что проверил.
Твой код полностью рабочий.
Видимо ты просто не в том месте ловишь.
PM MAIL   Вверх
DragonFire
Дата 20.2.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нифига ничего не пашет smile smile smile
Romikgy:
Комп не понимает, что такое floor. Попробовал заменить на Round - тоже не пашет.
В обоих случаях, в моем и что предложил Romikgy срабатывает только строка с минусом:
Код

ZScroll:=ZScroll-floor(HIWORD(WParam)/WHEEL_DELTA)
ZScroll:=ZScroll-1
Неважно, в какую сторону повернуто колесико - всегда только это действие...
Насчет ловлю:
Код

function WindowProc (Window : HWnd; Message, WParam : Word; LParam : LongInt) : LongInt; stdcall;
begin
  WindowProc:=0;
  case Message of
       WM_MOUSEWHEEL: begin
                      if HIWORD(WParam)-WHEEL_DELTA>0 then ZScroll:=ZScroll-1
                      else ZScroll:=ZScroll+1;     
                                       end;
  end;               
end;



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


Эксперт
****


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

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



function WindowProc она чья?
Это у тебя API приложение или VCL?
PM MAIL   Вверх
DragonFire
Дата 20.2.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



VCL нету...
Чистый API


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


Эксперт
****


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

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



Давай сюдавесь код. У меня все отлично отрабатывает, если WindowProc - обработчик сообщений главного окна.
P.S. операционка какая?
PM MAIL   Вверх
DragonFire
Дата 21.2.2006, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вот примерно так... вырезал из кода все ненужно...
Операционка - WindowsXP
Код

Library GameL;
uses
  Windows,
  Messages,
var
  Window:HWnd;  
  Message:TMsg;
  WindowClass:TWndClass;
   ZScroll:integer;
  
function WindowProc (Window : HWnd; Message, WParam : Word; LParam : LongInt) : LongInt; stdcall;
begin
  WindowProc:=0;
  case Message of
      wm_Destroy:begin
                  PostQuitMessage (0);
                  end;
       WM_MOUSEWHEEL: begin
                      {if HIWORD(WParam)-WHEEL_DELTA>0 then ZScroll:=ZScroll-1
                      else ZScroll:=ZScroll+1;  }
                      //if (abs(HIWORD(WParam))>WHEEL_DELTA) then ZScroll:=ZScroll-1//round(HIWORD(WParam)/WHEEL_DELTA)
                      //else ZScroll:=ZScroll+1;//round(HIWORD(WParam)/WHEEL_DELTA);

                      if ZScroll>0 then ZScroll:=0;
                      if ZScroll<-15 then ZScroll:=-15
                  end;
  end;
  WindowProc := DefWindowProc (Window, Message, WParam, LParam);
end;

procedure Game(Inst:Cardinal);
begin
  with WindowClass do begin
    Style:=cs_HRedraw or cs_VRedraw; 
    cbClsExtra := 0; 
    cbWndExtra := 0;
    hInstance := 0; 
    hIcon := LoadIcon (0, idi_Application); 
    hCursor := LoadCursor (0, idc_Arrow); 
    hbrBackground := GetStockObject(White_Brush); 
    lpszMenuName := '';             
    lpszClassName := 'GameInGame';  
  end;

   If RegisterClass (WindowClass) = 0 then
     Halt (255); 
     Window := CreateWindow
     ('GameInGame',            
      'Game',          
      WS_MAXIMIZE or WS_VISIBLE or WS_POPUP or WS_CLIPCHILDREN or WS_CLIPSIBLINGS, 
      0,
      0,
      1024,
      768, 
      0,     
      0,     
      Inst, 
      nil);  
  
   ShowWindow(Window, CmdShow); 
  UpdateWindow(Window);
  
  While GetMessage(Message,0,0,0) do begin 

    TranslateMessage (Message); 
    DispatchMessage (Message);   

    end;

   UnRegisterClass('GameInGame',Inst);
end;

      exports
        Game;
begin
end.



--------------------
PM MAIL ICQ   Вверх
Romikgy
Дата 21.2.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(DragonFire @ 20.2.2006, 19:46 Найти цитируемый пост)
что такое floor

для нее надо uses Math;
А в дебагере посмотреть что приходит в HIWORD(WParam) ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
DragonFire
Дата 21.2.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



HIWORD(WParam) - ничего не пишет...
WParam - всегда равен 0


--------------------
PM MAIL ICQ   Вверх
Romikgy
Дата 21.2.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(DragonFire @ 21.2.2006, 10:22 Найти цитируемый пост)
WParam - всегда равен 0

Хм ... странно это ...
Добавлено @ 11:35
попробуй этим воспользоватся
int GetSystemMetrics(

int nIndex // system metric or configuration setting to retrieve
);
с флагом
SM_MOUSEWHEELPRESENT Windows NT only: TRUE or nonzero if a mouse with a wheel is installed; FALSE, or zero, otherwise.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
DragonFire
Дата 22.2.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Че это за фишка?


--------------------
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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