读书人

用以下代码实现在DBGRID中支持鼠标滑动

发布时间: 2012-03-09 21:42:52 作者: rapoo

用以下代码实现在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;

读书人网 >.NET

热点推荐