在delphi中如何控制鼠标中键(滚动)? (100分)

  • 主题发起人 主题发起人 songhb
  • 开始时间 开始时间
S

songhb

Unregistered / Unconfirmed
GUEST, unregistred user!
1.怎样判断是向上滚动还是向下滚动?
2.我想在DBGrid控件中实现滚动效果,但在DBGrid中,该事件好象被屏蔽了,不起作用,
该如何解决?
 
用消息,你自己研究一下这个。主要是WM_MOUSEWHEEL的属性
procedure WMMOUSEWHEEL(var Msg:TWM_MOUSEWHEEL);message WM_MOUSEWHEEL;
 
我怎样判断是向上滚动还是向下滚动呢?
 
鼠标滚轮如何编程

  我们使用的鼠标,很多都带有一个滚轮,方便用户的操作。但遗憾的是,平时编程多数只利用到鼠标的左、右两键,如果将滚轮操作功能也加进你的程序,定能使其增色不少。

  当鼠标指针指向窗体中时,Delphi为滚轮滚动提供OnMouseWheel事件,我们可以对它进行相应的处理。本例中,在窗体内放置一标签Label1,用于显示滚轮滚动的效果。

  implementation

  var i:integer;

  procedure TForm1.FormCreate(Sender: TObject);

  begin

   i:=0;

   Label1.Caption:=inttostr(i);

  end;

  procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;

   WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);

  begin

   if WheelDelta>0 then i:=i+1 else i:=i-1;

   //wheelDelta参数表示滚动一格的值,向上滚动为正数,向下滚动则为负数

   Label1.Caption:=inttostr(i);

  end;

 
在TScrollBox TFrame TFrom TRichEdit TControl控件里有
OnMouseWheelUp
OnMouseWheelDown

如果你要用的控件没有这个事件,那你只好重载一下好了。
因为TControl里其实是有的,而所有的可视控件都是TControl
的子类,所以你只要自定义一个新控件,然后把这两个事件加
上就好了。以TMemo为例,新建一个TMemoWheel类以TMemo类为
基类:

unit MemoWheel;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
TMemoWheel = class(TMemo)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
property OnMouseWheelUp;
property OnMouseWheelDown;

//就是这两行了
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Dark Angel', [TMemoWheel]);
end;

end.

这就好了。当然Kenny的方法也是对的,不过你要自己判断
当前焦点在哪个控件,写对应的处理函数。我的方法麻烦一
点,不过定义之后可以重复使用。
 
我想在DBGrid控件中实现滚动效果,但在DBGrid中,该事件好象被屏蔽了,不起作用,
该如何解决?
 

Similar threads

回复
0
查看
835
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部