也可以发消息
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 |
自己捕捉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.