Z zhbruce Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-04 #1 如果没有OnDblClick的控件,如何确定鼠标是否双击?或者说如果没有OnDblClick, 我怎样自己写一个类以OnDblClick的事件。能详细地讲明一下吗?谢谢各位帮忙!
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-04 #3 单击的时候设置一个全局标志,如果一定时间内再次单击的话,则应该触发双击事件 简单地举个例子: 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;
单击的时候设置一个全局标志,如果一定时间内再次单击的话,则应该触发双击事件 简单地举个例子: 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;
教 教父 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-04 #4 从该类继承一个新类,在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就会响应双击事件,如果要做成控件的,你还要生成事件,具体就 看书了。
从该类继承一个新类,在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就会响应双击事件,如果要做成控件的,你还要生成事件,具体就 看书了。