to get around your problem you could just forget about hiword function and test like this:
If (Msg.wParam and $80000000)=0 then ..vk_down else ..vk_up; using $80000000 instead of just $8000. Also, another thing - you might want to check if the message is actually intended for the DBGrid or not (compare msg.hwnd with fbgrid.handle). If you think about having this wheelsupport in more than just this one dbgrid then you should probably go for a tdbgrid descendant (overwrite WinProc to handle it there). Kind Regards, Stefan Mueller -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Rohit Gupta Sent: Wednesday, 31 May 2006 10:54 a.m. To: NZ Borland Developers Group - Delphi List Subject: Re: [DUG] MouseWheel and DBGrid in D6 Wayne, I was not following the thread so I dont knwo what you were after. However, I have had mousewheel working in my apps bt overriding the DoMouseWheel method with the following code in it if WheelDelta = 0 then { Nothing } else if WheelDelta < 0 then DoScroll (True,SB_LINEDOWN) else DoScroll (True,SB_LINEUP); Result := True; I do remember that there were some controls that were not calling this method. For these, I overrode the parents method and called the childcomponents DoMouseWheel. Date sent: Wed, 31 May 2006 09:38:57 +1200 Subject: Re: [DUG] MouseWheel and DBGrid in D6 To: "NZ Borland Developers Group - Delphi List" <[email protected]> From: "Wayne Roser" <[EMAIL PROTECTED]> Send reply to: NZ Borland Developers Group - Delphi List <[email protected]> <mailto:[EMAIL PROTECTED]> <mailto:[EMAIL PROTECTED]> [ Double-click this line for list subscription options ] Hi Stefan Thanks for your explanation. I tried: if (HiWord(Msg.wParam) and $8000)=0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; but got the same error message as previously. Also tried Msg.wParamHi instead of HiWord() but that appears to be available for a TMessage and I've got Msg: tagMSG. Should I be using an event that gives me a TMessage instead of the TApplicationEvents.OnMessage that I am using? Wayne Appendix 1: tagMSG in Windows.pas { Message structure } PMsg = ^TMsg; tagMSG = packed record hwnd: HWND; message: UINT; wParam: WPARAM; lParam: LPARAM; time: DWORD; pt: TPoint; end; Appendix 2: TMessage in Messages.pas { Generic window message record } PMessage = ^TMessage; TMessage = packed record Msg: Cardinal; case Integer of 0: ( WParam: Longint; LParam: Longint; Result: Longint); 1: ( WParamLo: Word; WParamHi: Word; LParamLo: Word; LParamHi: Word; ResultLo: Word; ResultHi: Word); end; NZ Borland Developers Group - Delphi List <[email protected]> writes: >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 _______________________________________________ Delphi mailing list [email protected] http://ns3.123.co.nz/mailman/listinfo/delphi Regards Rohit ====================================================================== CFL - Computer Fanatics Ltd. 21 Barry's Point Road, AKL, New Zealand PH (649) 489-2280 FX (649) 489-2290 email [EMAIL PROTECTED] or [EMAIL PROTECTED] ====================================================================== _______________________________________________ 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
