关于鼠标第三键的问题!!!!(0分)

N

nbyyslf

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在DBGRID控件里,怎么做才能使第三键起作用,我现在用鼠标的第三键滚动,只能滚动
当前,请问哪里改一下,就能一直往下滚,正到到最后一条记录为址!
 
有点儿不明白你的意图的!
你可以在dbgrid的控件那儿判断它的onmousedown事件中的button
是不是mbmiddle来判断中键是否按下,
或者拦截它的消息:
procedure doscroll(var msg:tmessage);message wm_mousewheel;
.......
procedure tform1.doscroll;
begin
if msg.WParamHi >120 then
begin
repeat
dbgrid1.DataSource.DataSet.Next ;
until dbgrid1.datasource.dataset.Eof ;
end;
if msg.WParamHi< 120 then
begin
repeat
dbgrid1.DataSource.DataSet.Prior ;
until dbgrid1.DataSource.DataSet.Bof ;
end;
end;
 
我的意思是像EXCAL里哪样,鼠标中间一健不是可以滚动的吗?当滚动的时候,记录也会随
之滚下去,但是在DELPHI的DBGRID里不行,只能滚当能看到的记灵,不能最往下滚了,不知
道上面哪个老兄说的是不是能实现这个功能!或都哪位朋友还有知道更简单的方法!
能把楼上哪位老兄的QQ号码告诉我吗?谢谢!



















































 
向下滚!
sendmessage(dbgrid1.handle,wm_vscroll,sb_linedown,0);
向上滚!
sendmessage(dbgrid1.handle,wm_vscroll,sb_lineup,0);
写成:
procedure tform1.doscroll;
begin
if msg.WParamHi >120 then
begin
sendmessage(dbgrid1.handle,wm_vscroll,sb_linedown,0);
end;
if msg.WParamHi< 120 then
begin
sendmessage(dbgrid1.handle,wm_vscroll,sb_lineup,0);
end;
end;
 
楼上的朋友,我试了你说的,但是第一句就出错了,我是FORM6窗体里面
我把第一句改成procedure tform6.doscroll;就出错呀!
就提示[Error] Unit6.pas(90): Undeclared identifier: 'doscroll'这是为什么呀!
 
帖主,先加上:
procedure doscroll(var msg:tmessage);message wm_mousewheel;
位置,就选在private后面吧。
 
我是一个初学者,是不怎么懂的,希望你能详细的告诉我可以吗?我将万分感谢你因为这个
事情很急,我软件马上要交给对方用户看的!
 
老兄,我知道你说什么了,程序没有出错了,但是鼠标的第三键还是没有反映呀!写不写
语句是一样的呀!是哪里错了呀! 请大哥指教,我是FORM6里面的DBGRID1
procedure tform6.doscroll;
begin
if msg.WParamHi >120 then
begin
repeat
dbgrid1.DataSource.DataSet.Next ;
until dbgrid1.datasource.dataset.Eof ;
end;
if msg.WParamHi< 120 then
begin
repeat
dbgrid1.DataSource.DataSet.Prior ;
until dbgrid1.DataSource.DataSet.Bof ;
end;
end;

有哪里不对吗?怎么会不起作用的呀!
 
己经改了,请看前面的回应帖!
 
真得吗?好像不行呀!能不能告诉我你的QQ呀!我们在网上聊,可以吗?
 
sorry!
前段时间我没有滚轮鼠标,所以说出来的有点儿问题的!
如果要让dbgrid按你说的来响应滚轮消息,那就要重载一个控件。
方法如下:
component->new component
在New component的对话框中Ancestor type 下拉框选择TDBGrid。
Class Name起个名字,比如tdbgridX。再在palette page 选择控件
安装后所在的位置。比如:Data Controls。然后点击OK。出现了代码
编辑器了。
然后就可以新增一些方法了。主要是增加对wm_mousewheel消息的处理。
代码如下:
unit DBGridx;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids;

type
TDBGridx = class(TDBGrid)
private
{ Private declarations }
protected
{ Protected declarations }
procedure scrolldo(var Msg: Tmessage); message WM_mousewheel;
public
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Data Controls', [TDBGridx]);
end;

{ TDBGridx }


procedure TDBGridx.scrolldo(var Msg: Tmessage);
begin
if msg.WParamHi >120 then
begin
if not self.DataSource.DataSet.Eof then
self.DataSource.DataSet.Next ;
end;
if msg.WParamhi<=120then
begin
if not self.DataSource.DataSet.bof then
self.DataSource.DataSet.Prior ;
end;
end;
end.
写完之后,保存,然后再安装这个控件!
方法如下:
component->install component
出现install component对话框,点击unit file name旁边的browse
找到刚才所写的dbgridx.pas这个文件,点击 OK。出现package
dclusr50.dpk,再点compile。
就可以在data controls上找到一个tdbgridx的控件,这个控件
就可以达到滚动的要求!

 
楼上的兄台,还是不行呀,当进行编辑的时候,第一句就出错了!
unit DBGridx;
他的提示是[Error] DBGrid1.pas(1): Unit identifier 'DBGridx' does not match file name
这是怎么回事呀!我是把原来里面写的全都删掉,把你的完完整的写进去的,就出错呀!
急,希望你能帮我解决掉,谢谢你了!不知道能不能把你的QQ号码告诉我呢!请写上你的QQ
号码吧!可以吗?
 
老兄,你哪个控件我是编辑好了,也可以用了,但是滚动的速度太慢了,不像DEPHI自带的
哪么快了,不知道为什么!
 
self.DataSource.DataSet.Next
改成:self.datasource.dataset.moveby(3);

self.DataSource.DataSet.Prior ;
改成:self.datasource.dataset.moveby(-3)

最近我都没用QQ!所以QQ是联系不到我的!


 
顶部