Вы можете сохранить время последнего использования действия и игнорировать его, если время между ними слишком мало.
Для одного действия вы можете сделать так:
procedure TForm.FormCreate(const Sender: TObject);
begin
// ...
FLastActionTime := Now; //
end;
proceudure TForm.Action1Execute(const Sender: TObject);
const
cThreshold = 1/(24*60*60*10); // 0.1 sec
begin
if Now-FLastActionTime<cThreshold then
Exit; // Ignore two actions within 0.1 sec
FLastActionTime := Now;
end;
Вы можете комбинировать это с решением dmajkic, чтобы получить более общий подход. И если вы действительно амбициозны, вы можете создать новую версию TAction / TActionlist.