VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1016|回复: 1

用以下代码实现在DBGRID中支持鼠标滑动轮,但多选记录后滑动,焦点丢失,该怎么解决

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-20 01:20:01 | 显示全部楼层 |阅读模式
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中可用鼠标滑动轮,但在选定多条记录后滑动,选定的记录焦点全部丢失(用下拉条就不会丢失),该怎么解决呢?
回复

使用道具 举报

0

主题

25

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-5-10 11:15:01 | 显示全部楼层
问题出在你给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;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表