点击dbgrid的右侧的垂直滚动条,当前记录会跟着改变?如何解决这个问题如果有第三方组件,是什么?

解决方案 »

  1.   

    DBGrid會在處理WM_VSCroll時,執行FDataLink.MoveBy(..)
    除非自己再包裝DBGrid,處理WM_VSCROLL,否則很難達到你的目的...
      

  2.   

    这个问题好像问过,我也遇到过,是这样解决的:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids;type
       TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        ADOTable1: TADOTable;
        DataSource1: TDataSource;
        procedure FormCreate(Sender: TObject);
      private
         procedure ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean);      //在下面的过程写好后直接按Ctrl+Shift+C将自动生成此段代码
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    //------------------------------------------------------------------------------
    procedure  TForm1.ApplicationEvents1Message(var  Msg:  tagMSG;var  Handled:  Boolean);
    begin
     if  (DBGrid1.Focused)  And  (Msg.message  =  WM_MOUSEWHEEL)  then
           begin
               if  Msg.wParam  >  0  then
                   SendMessage(DBGrid1.Handle,  WM_KEYDOWN,  VK_UP,  0)
               else
                   SendMessage(DBGrid1.Handle,  WM_KEYDOWN,  VK_DOWN,  0);
               Handled  :=  True;
           end;
     if  (DBGrid2.Focused)  And  (Msg.message  =  WM_MOUSEWHEEL)  then               //如果有两个DBGrid
           begin
               if  Msg.wParam  >  0  then
                   SendMessage(DBGrid2.Handle,  WM_KEYDOWN,  VK_UP,  0)
               else
                   SendMessage(DBGrid2.Handle,  WM_KEYDOWN,  VK_DOWN,  0);
               Handled  :=  True;
           end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnMessage:=ApplicationEvents1Message; // 截获鼠标滚动事件
    end;
    或者procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin 
       Application.OnMessage:=ApplicationEvents1Message; // 截获鼠标滚动事件
    end;
      

  3.   

    较好的办法是用DBGridEH组件,与DBGrid好用得多!排序、冻结列,以及上面的滚动等都好控制些!
      

  4.   

    对,TDBGridEh刚好能满足你的要求,比TDBGrid好用很多。