DBGrid支持鼠标滚轮滚动的解决办法

方法一:

在窗体添加一个TApplicationEvents组件(在Additional中),然后在它的OnMessage事件中添加如下代码:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  // 当在 DBGrid1 上发生鼠标滚轮事件时
  if (DBGrid1.Focused) And (Msg.message = WM_MOUSEWHEEL) then
  begin
    if Msg.wParam > 0   then    // 滚轮上滚
      SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_UP, 0)   // 向DBGrid1发送 VK_UP按键消息
    else                        // 下滚
      SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_DOWN, 0);
    Handled := True;   // 消息已经处理完毕
  end;
end;
DBGrid1表示需要响应滚轮事件的DBGrid名,这样就能顺利解决滚轮支持的问题。

方法二:

首先在窗体定义前面新写一个类,继承于DBGrids.TDBGrid,添加一个DoMouseWheel的函数,如下:

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

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

  //....其他省略

{ TDBGrid }

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.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章