寻让DBGrid支持鼠标滚轮的最简单的方法

snjun 2004-12-30 11:07:56
DBGrid自带的滚动处理让人不可理解,要么就什么都不要做
自己重载了一个DBGrid,处理了一下滚轮消息,可是太麻烦,都要安装组件,老的程序要换还挺麻烦,不知有没有更简单的办法
自己在窗口里捕捉滚轮消息似乎又抓不到DBGrid的滚轮消息,郁闷之极
...全文
141 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
snjun 2004-12-30
  • 打赏
  • 举报
回复
DBGrid的消息要这么才能拦截

多谢两位了,收益非浅
snjun 2004-12-30
  • 打赏
  • 举报
回复
procedure TForm1.MouseWheelHandler(var Message: TMessage);
begin
if ActiveControl is TDBGrid then
begin
with TDBGrid(ActiveControl) do
begin
if DataSource=nil then exit;
if Message.WParam>0 then
begin
if not DataSource.DataSet.Bof then
DataSource.DataSet.Prior;
end
else
begin
if not DataSource.DataSet.Eof then
DataSource.DataSet.Next;
end;
end;
Message.Msg:=0;
end;
end;
kuki84 2004-12-30
  • 打赏
  • 举报
回复
gz
snjun 2004-12-30
  • 打赏
  • 举报
回复
小试了一下,不错
吃完饭再来慢慢看
ahuige 2004-12-30
  • 打赏
  • 举报
回复
type
Tfrmdata = class(TForm)
public
procedure MouseWheelHandler(var Message: TMessage);override;
implementation
procedure tfrmdata.MouseWheelHandler(var Message: TMessage);
begin
if message.WParam <0 then
datasource1.DataSet.Next
else
datasource1.DataSet.prior;

end;
这个问题以前是我常常得分的问题,呵呵
lzy6204 2004-12-30
  • 打赏
  • 举报
回复
哥们,这样试试吧
自己捕捉WM_MOUSEWHEEL消息处理
private
OldGridWnd : TWndMethod;
procedure NewGridWnd (var Message : TMessage);
public

procedure TForm1.NewGridWnd(var Message: TMessage);
var
IsNeg : Boolean;
begin
if Message.Msg = WM_MOUSEWHEEL then
begin
IsNeg := Short(Message.WParamHi) < 0;
if IsNeg then
DBGrid1.DataSource.DataSet.MoveBy(1)
else
DBGrid1.DataSource.DataSet.MoveBy(-1)
end
else
OldGridWnd(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
OldGridWnd := DBGrid1.WindowProc ;
DBGrid1.WindowProc := NewGridWnd;
end;
支持鼠标的上下移动,肯定没问题的,试试看就知道了.
lzy6204 2004-12-30
  • 打赏
  • 举报
回复
为什么不换控件呢?
如果只是显示数据,改用listview可以支持mousewheel.
用 Ehlib3.0 的 EhDBGrid 也支持鼠标滚轮,
很容易使用啊﹐為什么放著好東東不用呢
snjun 2004-12-30
  • 打赏
  • 举报
回复
procedure TForm1.WMMOUSEWHEEL(var msg: TMessage);
var
obj:TObject;
begin
obj:=ControlAtPos(Mouse.CursorPos,True,True);
showmessage(obj.ClassName);
if obj is TDBGrid then
begin
with TDBGrid(obj) do
begin
if DataSource=nil then exit;
if msg.WParam>0 then
begin
if not DataSource.DataSet.Bof then
DataSource.DataSet.Prior;
end
else
begin
if not DataSource.DataSet.Eof then
DataSource.DataSet.Next;
end;
end;
end;
end;

这是写在窗体里的,抓不到
caiso 2004-12-30
  • 打赏
  • 举报
回复
up,关注一下

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧