I would try: I := smallint(msg.paramhi);
or .. my preferred way: If (Msg.wParamHi and $8000)=0 then vk_down else vk_up; the problem is with mixing signed and unsigned datatypes. "Word" datatype is unsigned (only has positive range) .. while smallint is "signed" (has +/- range). Range of datatype: Word = 0.. 65534; smallint = -32768..+32767 a value in a signed datatype is negative if the highest bit is set: +2 = $0002 +1 = $0001 0 = $0000 -1 = $ffff -2 = $fffe As you can see ... the value of -1 is stored as $ffff in your wparamhi word. Assigning $ffff to a smallint will raise a range error as the compiler thinks you try to assign $ffff=65535 to it. Kind Regards, Stefan Mueller -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Wayne Roser Sent: Tuesday, 30 May 2006 2:47 p.m. To: NZ Borland Developers Group - Delphi List Subject: [DUG] MouseWheel and DBGrid in D6 I found an article in Delphi.about.com and got this code to fix MouseWheel behaviour in a DBGrid: procedure TForm1.ApplicationEvents1Message (var Msg: TMsg; var Handled: Boolean) ; var i: SmallInt; begin if Msg.message = WM_MOUSEWHEEL then begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; i := HiWord(Msg.wParam) ; // this line gives me a problem if i > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; Handled := False; end; end; So I dropped a TApplicationEvents component on my form and used the code. I get a problem at the line i := HiWord(Msg.wParam) ; Msg.wParam is -7864320 and an ERangeError pops up with message 'Range check error' My working version has i := Msg.wParam div abs(Msg.wParam); in place of the offending line but I'd like to know wassup with the original code. Wayne Roser _______________________________________________ Delphi mailing list [email protected] http://ns3.123.co.nz/mailman/listinfo/delphi _______________________________________________ Delphi mailing list [email protected] http://ns3.123.co.nz/mailman/listinfo/delphi
