zoukankan      html  css  js  c++  java
  • 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.

    如此也能解决滚轮问题,但是个人觉得还是前一种方法比较好。

     
  • 相关阅读:
    P7473 [NOI Online 2021 入门组] 重力球
    CF896D Nephren Runs a Cinema
    [持续更新]一些有趣的数学问题
    [微积分与无穷级数]AMM Problems笔记
    [补题]SWERC-2018
    [补题]Asia Regional Contest, Tokyo, 2014

    [NOI2005]瑰丽华尔兹-单调队列优化DP
    [补题]2017多校D-BD-区间筛/二分+线段树
    [补题]2017多校5A/HDU6085-Rikka with Candies-bitset优化
  • 原文地址:https://www.cnblogs.com/tangqs/p/2496801.html
Copyright © 2011-2022 走看看