开发环境:DELPHI7 ADO EHLIB33现象:EHLIB33中,光标,随着,滚轮的上下移动而移动。鼠标滚动时,整个数据集移动,选中的那一行自动变为当前DBGRIDEH页面中的第一行或最后一行。要达到的目的:EHLIB33中,鼠标滚动的上下移动时,整个数据集,还是要移动的,只是:选中的那一行不变。

解决方案 »

  1.   

    我觉得是作不到的, 因为 DataLink 就像一个 window, 对于DBGridEh, 只看到数据的一部份, DBGridEh 不知道对应的是 ClientDataSet, 所以 Cursor 只好跟着 ActiveBuffer 动而动
      

  2.   

    这个问题关注很久了,没有找到解决方案。:(如果有解决的兄弟请告知,另送100分,[email protected]同时表示强烈关注!!
      

  3.   

    EhLib还是不如PB的数据窗口。可惜PB太烂了,要不然去学习PB了。
      

  4.   

    再顶一次难道是Ehlib的BUG嘛?
      

  5.   

    哈哈,我来解决!;)是不是这个?!procedure TCustomDBGridEh.Scroll(Distance: Integer);
    var
      OldRect, NewRect, ClipRegion: TRect;
      RowHeight: Integer;
      VertSBVis: Boolean;
    begin
      if not HandleAllocated then Exit;
      OldRect := BoxRect(0, Row, ColCount - 1, Row);
    // modify by crm 20040302 修改列表更新
    //  if (FDataLink.ActiveRecord >= RowCount - TopDataOffset)
    //    then UpdateRowCount;
    // 改为:
      UpdateRowCount;
      
    // modify by crm本人在D6下调试通过,在万人使用半年后没问题!
      

  6.   

    这是我以前在网上找的资料。希望对你有所帮助。我没有试过。
    如何在TDBGrid控件中正确的使用鼠标滚轮 (2004年1月30日) 
    Mouse wheel behaves strangely with dbgrids - this code handler will correct this behavior. 
    鼠标中轮在TDBGrid控件中总是工作的很奇怪-这段代码将能改正这个错误。Just drop a TApplication component on a form 
    你只要将一个TApplication 控件放到窗体上~~~~~~~~~~~~~~~~~~~~~~~~~
    procedure Application1.OnMessage
    (var Msg: TMsg; var Handled: Boolean) ;
    var
    i: SmallInt;
    begin
    if Msg.message = WM_MOUSEWHEEL then
    begin
    Msg.message := WM_KEYDOWN;
    Msg.lParam := 0;
    i := HiWord(Msg.wParam) ;
    if i > 0 then
    Msg.wParam := VK_UP
    else
    Msg.wParam := VK_DOWN;Handled := False;
    end;
    end;
      

  7.   

    TApplication 控件我怎么找不到呢?
      

  8.   

    就是TApplicationEvents
    Additional -> TApplicationEvents