我们在应用程序中遇到问题,用户双击几乎所有内容,包括按钮。在某些情况下会导致用户不想要的东西,因为它会在按钮上触发两次OnClick事件。提出了一个防止整个应用程序出现此问题的想法,我想知道使用它是否存在任何陷阱。
添加TApplicationEvents
并实施OnMessage
,将Handled
的{{1}}设为WM_LBUTTONDBLCLK
至TButton
。
这样的事情:
True
一个明显的缺点是,如果您遇到某种情况,用户实际上想要点击同一个按钮并加快速度。如果在这个特定的应用中就是这种情况,还有待研究。
答案 0 :(得分:3)
为避免在OnClickEvent中使用常量:
procedure TMyForm.Button1OnClick(sender:TObject);
const
{$J+}
IsInside:Boolean=False;
{$J-}
begin
if IsInSide then Exit;
IsInside:=True;
try
do your code;
finally
IsInside:=False;
end;
end;
如果你有很多按钮,我建议使用TActionList作为那些按钮并捕获ActionList事件的de OnActionExecute。未经测试,请参阅TActionList获取帮助。我以前用过它。
procedure TMyForm.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
const
{$J+}
IsInside:Boolean=False;
{$J-}
begin
if IsInSide then Exit;
IsInside:=True;
try
ActionList1.ExecuteAction(Action);
finally
IsInside:=False;
end;
end;