dbgrid支持鼠标滚轮

也可以发消息
        SendMessage(Screen.ActiveForm.ActiveControl.Handle,
                    WM_VSCROLL,
                    SB_PAGEUP,    //SB_PAGEUP按页上滚,SB_LINEUP按行上滚
                    0)
      else
        SendMessage(Screen.ActiveForm.ActiveControl.Handle,
                    WM_VSCROLL,
                    SB_PAGEDOWN,  //SB_PAGEDOWN按页下滚,SB_LINEDOWN按行下滚
                    0);

 

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
//¸øDBGrid¼ÓÉÏÊó±ê¹öÂÖ
//HWND hWnd ;
//char aName[255];
TMessage m;
       m.w
    if( Msg.message != WM_MOUSEWHEEL )
       return;
//    hWnd = WindowFromPoint(Msg.pt);
//    if ( (GetClassName(hWnd, aName, 256))
  //    && (String(aName)=="TDBGrid") )//Èç¹ûµÚÈý·½¿Ø¼þÐèÒªÐ޸ģ¬±ÈÈçÓÃaName='TbsSkinDBGrid'
  if(this->ActiveControl ==this->DBGrid1)
    {
        if(( (SHORT) HIWORD(Msg.wParam)) < 0 )
        Msg.
        {
            this->DBGrid1->DataSource->DataSet->MoveBy(1);
        }
        else
        {
            this->DBGrid1->DataSource->DataSet->MoveBy(-1);

        }
        Handled = true;
    }

}

 

 

//先在form上加一个TApplicationEvents


procedure   TForm1.ApplicationEvents1Message(var   Msg:   tagMSG;
    var   Handled:   Boolean);
begin
  if   (DBGrid1.Focused)   And   (Msg.message   =   WM_MOUSEWHEEL)   then
        begin
            if   Msg.wParam   >   0   then
                SendMessage(DBGrid1.Handle,   WM_KEYDOWN,   VK_UP,   0)
            else
                SendMessage(DBGrid1.Handle,   WM_KEYDOWN,   VK_DOWN,   0);
            Handled   :=   True;
        end;
end;

 

自己捕捉WM_MOUSEWHEEL消息处理
private
  OldGridWnd   :   TWndMethod;
procedure   NewGridWnd   (var   Message   :   TMessage);
public

procedure   TForm1.NewGridWnd(var   Message:   TMessage);
var
  IsNeg   :   Boolean;
begin
  if   Message.Msg   =   WM_MOUSEWHEEL   then
  begin
      IsNeg   :=   Short(Message.WParamHi)   <   0;
      if   IsNeg   then
          DBGrid1.DataSource.DataSet.MoveBy(1)
      else
          DBGrid1.DataSource.DataSet.MoveBy(-1)
  end
  else
      OldGridWnd(Message);
end;

procedure   TForm1.FormCreate(Sender:   TObject);
begin
  OldGridWnd   :=   DBGrid1.WindowProc   ;
  DBGrid1.WindowProc   :=   NewGridWnd;
end;            

 

 

unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   ExtCtrls,   DBCtrls,   Grids,   DBGrids,   DB,   ADODB,   MyDbGrid;


type
    TDBGrid=   class(DBGrids.TDBGrid)
    public
        function   DoMouseWheel(Shift:   TShiftState;   WheelDelta:   Integer;   MousePos:   TPoint):   Boolean;   override;
    end;


type
    TForm1   =   class(TForm)
        ADOConnection1:   TADOConnection;
        ADODataSet1:   TADODataSet;
        DataSource1:   TDataSource;
        DBGrid1:   TDBGrid;
        DBNavigator1:   TDBNavigator;
        ADOQuery1:   TADOQuery;
        DataSource2:   TDataSource;
        ADOTable1:   TADOTable;
    private
        {   Private   declarations   }
    public

        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation

{$R   *.dfm}

function   TDBGrid.DoMouseWheel(Shift:   TShiftState;
    WheelDelta:   Integer;   MousePos:   TPoint):   Boolean;
begin
    if   WheelDelta   <   0   then
        Datasource.DataSet.Next;
    if   wheelDelta   >   0   then
        DataSource.DataSet.Prior;
end;

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值