Слышал про дополнительный код? Про то, как хранятся в компьютере отрицательные числа? Переведи свои полученные 4 с гаком миллиарда в hex и увидишь, что это FF880000. Старший бит равен 1, значит число отрицательное и его "человеческое" значение - это 0x100000000 - 0xFF880000 = -7864320 (-0x00780000).
Что это за число?
Читаем msdn (вернее, его перевод)
Цитата:
wParam
Старшее слово указывает интервал, на который прокрутилось колесико, выраженный в нескольких или раздельных WHEEL_DELTA, число которых - 120. Положительное значение указывает, что колесико вращалось вперед, в сторону от пользователя; отрицательное значение указывает, что колесико вращалось назад, к пользователю.
Младшее слово указывает, находятся ли в нажатом состоянии различные виртуальные клавиши. Этот параметр может состоять из одного или нескольких ниже перечисленных значений.
|
То есть wParam делим на 2 части: 0x0078 и 0x0000. 0x78 = 120, как и ожидалось.
Таким образом, берем старшую часть wParam и смотрим старший бит:
Код:
if ((wParam shr 16) and 0x8000) = 0 then ; // > 0
// или эквивалент
if (wParam and 0x80000000) = 0 then ; // > 0
Можно "прямо" привести число к integer'у (
integer(value)), и число само, так сказать, станет отрицательным, если было больше 0x80000000 (но говорить так не стоит, т.к. на самом деле разницы между положительными и отрицательными попросту нет, разве что в восприятии их человеком или компилятором). Но не люблю я это дело когда речь о битовых операциях. Хочешь - попробуй под отладкой сделать
Код:
if integer(wParam) < 0 then ...
Должно сработать.
Почаще заглядывай в "недра" кода и внимательней читай доки.