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.



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