首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

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

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

[解决办法]
问题出在你给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;

热点排行