关于网友提出的“ 关于在dbgird 中加鼠标滚动遇到的问题”问题疑问,本网通过在网上对“ 关于在dbgird 中加鼠标滚动遇到的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 关于在dbgird 中加鼠标滚动遇到的问题
描述: 我在网上查到一个关于鼠标滚动的方法.
private
Procedure OnMouseWheel(Var Msg :TMsg;var Handled:Boolean);
在formcreate下加入
Application.OnMessage:=OnMouseWheel;截获鼠标滚动事件
Procedure TForm1.OnMouseWheel(Var Msg :TMsg;var Handled:Boolean);
begin
if Msg.message = WM_MouseWheel then
begin
if Msg.wParam > 0 then
begin
if DBGrid1.Focused then
SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEUP,0);
end
else
begin
if DBGrid1.Focused then
SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);
end;
Handled:= True;
end;
end;
功能我已经实现在了.但是我再加上一个form2.
同样的在form2里面加入此功能.运行后.form1里面的滚动没有了.form2的功能可以实现.
请问一下.这是什么原因造成的.谢谢
解决方案1: 来晚了,如1楼所说即可。
记得改好对应过程的名称,如Form1.过程名 ....Form2.....Form3.....
解决方案2: 帮你顶下...我也想知道
解决方案3: 我看了你的代码,你都写死了,怎么会有呢
SendMessage(DBGrid1.Handle
这样只对DBGrid1起作用了,建议改成1楼的方法.
解决方案4: 是在dbgird 中不,用2007吧.2007直接支持.
解决方案5: 你的那个OnMessage里写死了!
procedure TForm1.OnMouseWheel(var Msg: TMsg; var Handled: Boolean);
var
WinCtrl: TWinControl;
begin
if Msg.message = WM_MouseWheel then
begin
WinCtrl := FindControl(GetFocus);
if WinCtrl is TDBGrid then
begin
if Msg.wParam > 0 then
SendMessage(WinCtrl.Handle, WM_VSCROLL, SB_PAGEUP, 0)
else
SendMessage(WinCtrl.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);
end;
Handled := True;
end;
end;
以上介绍了“ 关于在dbgird 中加鼠标滚动遇到的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3197232.html