为解决dbgrid中的数据在超出屏幕时通过鼠标滚轮的上下移动查看数据,新建组件,Ancestor Type选择TDBGrid,在dbgrid中加MouseDown,MouseUp,MouseMove等事件,但是我定义的三个私有的事件变量fMouseWheel:TMouseWheelEvent;fMouseWheelUp:TMouseWheelUpDownEvent;fMouseWheelDown: TMouseWheelUpDownEvent;被提示未经声明!望各位高手指点!代码如下:
unit myDbGrid;interfaceuses
SysUtils, Classes, Controls, Grids, DBGrids, messages, windows;type
TmyDbGrid = class(TDBGrid)
private
fMouseWheel:TMouseWheelEvent;
fMouseWheelUp:TMouseWheelUpDownEvent;//鼠标轮上滚事件
fMouseWheelDown: TMouseWheelUpDownEvent;//鼠标轮下滚事件
protected
{ Protected declarations }
public
{ Public declarations }
published
property OnMouseWheel:TMouseWheelEvent read fMouseWheel write fMouseWheel;
property OnMouseWheelUp:TMouseWheelUpDownEvent read fMouseWheelUp write fMouseWheelUp;
property OnMouseWheelDown:TMouseWheelUpDownEvent read fMouseWheelDown write fMouseWheelDown;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TmyDbGrid]);
end;procedure WndProc(var Msg: TMessage);overloa;
var
MousePoint: TPoint;
Handled:Boolean;
shift:TShiftState;
begin
if(Msg.Msg=WM_MOUSEWHEEL) then //捕获鼠标轮事件
begin
MousePoint.X:=LOWORD(Msg.lParam);//获得事件发生时鼠标的位置
MousePoint.Y:=HIWORD(Msg.lParam);//获得事件发生时鼠标的位置
Handled:=false;
if(Msg.wParam>0) then//上滚
fMouseWheelUp(Self,shift,MousePoint,Handled)
else//下滚
fMouseWheelDown(self,shift,MousePoint,Handled);
fMouseWheel(self,shift,HIWORD(Msg.wParam),MousePoint,Handled);
if Handled then exit;
end;
inherited;
end;end.
unit myDbGrid;interfaceuses
SysUtils, Classes, Controls, Grids, DBGrids, messages, windows;type
TmyDbGrid = class(TDBGrid)
private
fMouseWheel:TMouseWheelEvent;
fMouseWheelUp:TMouseWheelUpDownEvent;//鼠标轮上滚事件
fMouseWheelDown: TMouseWheelUpDownEvent;//鼠标轮下滚事件
protected
{ Protected declarations }
public
{ Public declarations }
published
property OnMouseWheel:TMouseWheelEvent read fMouseWheel write fMouseWheel;
property OnMouseWheelUp:TMouseWheelUpDownEvent read fMouseWheelUp write fMouseWheelUp;
property OnMouseWheelDown:TMouseWheelUpDownEvent read fMouseWheelDown write fMouseWheelDown;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TmyDbGrid]);
end;procedure WndProc(var Msg: TMessage);overloa;
var
MousePoint: TPoint;
Handled:Boolean;
shift:TShiftState;
begin
if(Msg.Msg=WM_MOUSEWHEEL) then //捕获鼠标轮事件
begin
MousePoint.X:=LOWORD(Msg.lParam);//获得事件发生时鼠标的位置
MousePoint.Y:=HIWORD(Msg.lParam);//获得事件发生时鼠标的位置
Handled:=false;
if(Msg.wParam>0) then//上滚
fMouseWheelUp(Self,shift,MousePoint,Handled)
else//下滚
fMouseWheelDown(self,shift,MousePoint,Handled);
fMouseWheel(self,shift,HIWORD(Msg.wParam),MousePoint,Handled);
if Handled then exit;
end;
inherited;
end;end.
procedure TForm1.AppOnMessage(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);
if i > 0 then
Msg.wParam := VK_UP
else
Msg.wParam := VK_DOWN; Handled := False;
end;
end;
可以参照上面修改