procedure TForm_dbgrid.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;end;=====以上代码实现了在DBGRID中可用鼠标滑动轮,但在选定多条记录后滑动,选定的记录焦点全部丢失(用下拉条就不会丢失),该怎么解决呢?

解决方案 »

  1.   

    问题出在你给DBGRID发送的是WM_KeyDown消息,也就是你在DBGrid上按了上下键。当然会出现这种状况。把消息改一下,就可以了。procedure TForm_DBGrid.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    var
      MsgScroll: TWMScroll;
    begin
      if (DBGrid1.Focused) and  (Msg.message = WM_MOUSEWHEEL) then
      begin
        MsgScroll.Msg := WM_VScroll;
        if Msg.wParam > 0 then
          MsgScroll.ScrollCode := SB_LINEUP
        else
          MsgScroll.ScrollCode := SB_LINEDOWN;
        DBGrid1.Dispatch(MsgScroll);
        Handled   :=   True;
      end;
    end;