[DUG] MouseWheel and DBGrid in D6

Stefan Mueller muellers at orcl-toolbox.com
Tue May 30 16:41:17 NZST 2006


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: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz] 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
Delphi at ns3.123.co.nz
http://ns3.123.co.nz/mailman/listinfo/delphi



More information about the Delphi mailing list