我想实现在DBGrid上鼠标滚动时,DBGrid中的记录相应滚动功能,不知如何实现,请各位帮忙.
解决方案 »
- 帮忙找一下错误,有分数的!
- 关于Socket,请各位帮帮忙
- update出的问题??
- 我用TerminateThread(FirstThread.handle,0);为什么无法中止线程?
- 请教delphi5,delphi5从入门到精通以及delphi5开发人员指南的配套光盘下载
- 在Delphi6中使用WebSnap技术开发B/S构架系统
- 1000分大奉送!!!!!决不食言!
- 我在使用access的时候
- 汉化Delphi 6的IDE有没有意义?
- 请教如何用delphi实现接收所有ping过来的icmp数据包并提取出来的啊?
- 急问,关于调用C++库中函数的问题(在线等)
- 困惑,速度为什么越来越慢呢?
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEDOWN,0)
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEUP,0)查看procedure TControl.WMMouseWheel(var Message: TWMMouseWheel);
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEDOWN,0)
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEUP,0)
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
private
OldGridWnd : TWndMethod;
procedure NewGridWnd (var Message : TMessage);
publicprocedure 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;