关于鼠标双击的问题?(100分)

  • 主题发起人 主题发起人 zhbruce
  • 开始时间 开始时间
Z

zhbruce

Unregistered / Unconfirmed
GUEST, unregistred user!
如果没有OnDblClick的控件,如何确定鼠标是否双击?或者说如果没有OnDblClick,
我怎样自己写一个类以OnDblClick的事件。能详细地讲明一下吗?谢谢各位帮忙!
 
单击的时候设置一个全局标志,如果一定时间内再次单击的话,则应该触发双击事件
简单地举个例子:
const
DbClickTimeOut = 500; //双击间隔,毫秒单位
var
OldTick: DWord = 0;
...
procedure TMainForm.YourComponentClick(Sender: TObject); //单击事件
begin
if GetTickCount - OldTick < DbClickTimeOut then
begin//双击事件条件成立
if Assigned(OnYourDbClick) then//若有相应的处理函数则触发之
OnYourDbClick(Sender);
end;

OldTick := GetTickCount;

//后面就是你自己的单击事件处理了
end;
 
从该类继承一个新类,在protected中处理消息 WM_LBUTTONDBLCLK 就可以了,我写了下面这段
代码,测试通过。

TBevelEx = class(TBevel)
protected
procedure WMLButtonDBLClk(var Msg : TWMLButtonDBlClk); message WM_LBUTTONDBLCLK;
end;

procedure TBevelEx.WMLButtonDBLClk(var Msg: TWMLButtonDBlClk);
begin
ShowMessage('Double Click');
inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with TBevelEx.Create(Self) do begin
Left := 100;
Top := 100;
Parent := Self;
end;
end;

这样动态生成的Bevel就会响应双击事件,如果要做成控件的,你还要生成事件,具体就
看书了。
 
教父的OK
 
多人接受答案了。
 
后退
顶部