为解决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. 

解决方案 »

  1.   

    你只要将一个TApplication 控件放到窗体上~~~~~~~~~~~~~~~~~~~~~~~~~
    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;
    可以参照上面修改