Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 12:28   #1
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию Обработка WM_MOUSEWHEEL

Здравствуйте!
Пытаюсь сделать обработку сообщения WM_MOUSEWHEEL, но никак не могу найти работающего примера.. Ни один пример положительного результата не дал. В большинстве примеров производятся какие - либо манипуляции с wParam, но, просмотрев отладчиком, я обнаружил, что wParam ВСЕГДА равен 0. В чем может быть дело?
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 27.03.2009, 13:06   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Если для формы, то обработать можно так:
Код:
 Private
    { Private declarations }
    Procedure WMMOUSEWHEEL (Var Msg: TWMMOUSEWHEEL );
    Message WM_MOUSEWHEEL ;
...
Procedure TForm1.WMMOUSEWHEEL(Var Msg: TWMMOUSEWHEEL );
Begin
If Msg.WheelDelta > 0 Then
Begin
Label1.Caption:='UP';
End
Else
Begin
Label1.Caption:='DOWN';
End;
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 27.03.2009, 13:14   #3
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Нет, не для формы( Пишу на winapi...
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 27.03.2009, 18:47   #4
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Спасибо, проблема решена с помощью яндекса.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 12.11.2011, 18:21   #5
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
Хорошо

Цитата:
Сообщение от Terran Посмотреть сообщение
Если для формы, то обработать можно так:
Код:
 Private
    { Private declarations }
    Procedure WMMOUSEWHEEL (Var Msg: TWMMOUSEWHEEL );
    Message WM_MOUSEWHEEL ;
...
Procedure TForm1.WMMOUSEWHEEL(Var Msg: TWMMOUSEWHEEL );
Begin
If Msg.WheelDelta > 0 Then
Begin
Label1.Caption:='UP';
End
Else
Begin
Label1.Caption:='DOWN';
End;
End;
ну наконец то нашел! СПАСИБО !!!!!!!!!!!!!
Giku вне форума Ответить с цитированием
Старый 12.11.2011, 22:31   #6
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
Печаль

Код:
Procedure TForm1.WMMOUSEWHEEL(Var Msg: TWMMOUSEWHEEL );
Begin
If Msg.WheelDelta > 0 Then
Begin
for i:=1 to n do
Ar[i].top := Ar[i].top + 10;
Br[i].top := Br[i].top + 10;
End
Else
Begin
for i:=1 to n do
Ar[i].top := Ar[i].top - 10;
End;
End;
помогите с кодом, программа запускается но если повернуть колесик вверх то выдает ошибку

ProjectProject1exe raised exception class EAccesViolation with message 'Acces violation at address 0044F03A in module 'Project1.exe'. Read of address 00000044'. Proces stoped. Use Step or Run to continue.

после этого в программе пишет

[Warning] Unit1.pas(58): For loop control variable must be simple local variable

я думаю что это из за строчки
Код:
Br[i].top := Br[i].top + 10;
без нее все работает замечательно

в чем ошибка?


(Ar и Br это объекты, которые при вращения колесика меняют свое положение относительно верха, должно получится как в браузере )

Последний раз редактировалось Giku; 12.11.2011 в 23:24.
Giku вне форума Ответить с цитированием
Старый 13.11.2011, 04:09   #7
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Giku, предполагаю, что командой:
Код:
Br[i].top := Br[i].top + 10;
Вы залезаете чуть дальше размера массива Br. (что естественно недопустимо)
Я бы на вашем месте попробывал написать:
Код:
Br[i-1].top := Br[i-1].top + 10;
zotox вне форума Ответить с цитированием
Старый 13.11.2011, 16:18   #8
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию

проблема решилась с добавлением begin и end
Код:
for i:=1 to n do
begin
Ar[i].top := Ar[i].top + 10
Br[i].top := Br[i].top + 10;
end;
Giku вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строки Staxxx Общие вопросы C/C++ 2 03.01.2009 12:30
Обработка текста Absent Помощь студентам 2 20.05.2008 23:17