防止双击TButton

时间:2013-04-30 06:30:17

标签: delphi user-interface delphi-xe vcl

我们在应用程序中遇到问题,用户双击几乎所有内容,包括按钮。在某些情况下会导致用户不想要的东西,因为它会在按钮上触发两次OnClick事件。提出了一个防止整个应用程序出现此问题的想法,我想知道使用它是否存在任何陷阱。

添加TApplicationEvents并实施OnMessage,将Handled的{​​{1}}设为WM_LBUTTONDBLCLKTButton

这样的事情:

True

一个明显的缺点是,如果您遇到某种情况,用户实际上想要点击同一个按钮并加快速度。如果在这个特定的应用中就是这种情况,还有待研究。

1 个答案:

答案 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;