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.

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

     
  • 相关阅读:
    【转】JVM 堆内存设置原理
    【转】Java八种基本数据类型的比较及其相互转化
    8月12日
    并发与竞争
    高通gpio配置输出
    创建一个字符设备的基本流程
    4月2号 字符设备驱动实验
    3.30学习遇到卡死点
    断言函数的用法
    12.02 下午
  • 原文地址:https://www.cnblogs.com/tangqs/p/2496801.html
Copyright © 2011-2022 走看看