在DBGrid上如何实现鼠标滚动

suns02 2004-08-10 03:14:34
我想实现在DBGrid上鼠标滚动时,DBGrid中的记录相应滚动功能,不知如何实现,请各位帮忙.
...全文
105 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kencharles 2004-08-10
  • 打赏
  • 举报
回复
yq3woaini(哈哈镜(初级代码工)(★★★)) 的代码比较好!
suns02 2004-08-10
  • 打赏
  • 举报
回复
谢谢 yq3woaini(哈哈镜(初级代码工)(★★★)) ,可以了
suns02 2004-08-10
  • 打赏
  • 举报
回复
谢谢各位,我先试试
飞天揽月 2004-08-10
  • 打赏
  • 举报
回复
DBGrid不支持鼠标的上下移动的解决代码(感谢 wangxian11 提供)自己捕捉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;
boatzm 2004-08-10
  • 打赏
  • 举报
回复
呵呵
飞天揽月 2004-08-10
  • 打赏
  • 举报
回复
3种方法:

1:继承生成新类,直接继承!

2:Application.OnMessage:=ApplicationMessage;

procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) then
begin
//处理程序
end
else
inherited;
end;

3:窗体子类化
function SubClassWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LResult;stdcall;
begin
if Msg = WM_MOUSEWHEEL then
begin
//处理程序
Result := 0;
end
else
begin
Result := CallWindowProc(Pointer(i),Form1.Button1.handle,Msg,WParam,LParam);
end;
end;

i:=GetWindowLong(Button1.Handle,GWL_WNDPROC);
SetWindowLong(Button1.Handle,GWL_WNDPROC,Longint(@SubClassWndProc));

SetWindowLong(Handle,GWL_WNDPROC,LongInt(Pointer(i)));//恢复

至于向上还是向下,判断Msg.wParam
飞天揽月 2004-08-10
  • 打赏
  • 举报
回复
拦截WM_MOUSEWHEEL
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEDOWN,0)
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEUP,0)
飞天揽月 2004-08-10
  • 打赏
  • 举报
回复
可以在当前显示的记录里滚动,但 不能让滚动条滚动, 是吧
oioioi-090 2004-08-10
  • 打赏
  • 举报
回复
http://search.csdn.net/Expert/topic/1236/1236355.xml?temp=.6456262
suns02 2004-08-10
  • 打赏
  • 举报
回复
现在在DBGrid中滚动只能滚动当前窗口中的数据,且数据不能定位
oioioi-090 2004-08-10
  • 打赏
  • 举报
回复
拦截WM_MOUSEWHEEL
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEDOWN,0)
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEUP,0)

查看procedure TControl.WMMouseWheel(var Message: TWMMouseWheel);

princesd 2004-08-10
  • 打赏
  • 举报
回复
本来就是滚动,不清楚实际的意图
suns02 2004-08-10
  • 打赏
  • 举报
回复
要达到在DBGrid上滚动时像点击右边的滚动条一样的效果
drift1981 2004-08-10
  • 打赏
  • 举报
回复
楼主的表里是不是就一行数据,数据多了自然就可以滚动了
qwertyasd 2004-08-10
  • 打赏
  • 举报
回复
是呀本来就支持滚轮!
insert2003 2004-08-10
  • 打赏
  • 举报
回复
本来就是滚动的嘛

你要达到什么样的效果呢?

5,388

社区成员

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

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