做了个查询数据的简单系统,因为防止用户恶意查询,点住enter不动快速的点击button按钮,造成频繁查询耗费服务器资源。我初步思路是form.creat的时候,把now赋给一个Tdatetime变量lastclicktime,然后点击button后,再用 now-lastclicktime,再formatdatetime('s',now-lastclicktime) ,再将这个值转化成数值,但是这样的间隔只能精确到秒,也就是now-lastclicktime最多精确到1秒,不满足要精确到200,300,500毫秒的要求。有什么办法让2次点击的时间不得小于0.5秒吗?

解决方案 »

  1.   

    点击button sleep 0.5秒呗
      

  2.   

    像这样试一下
    button1.enable:=false;
    sleep(500);
    button1.enable:=true;
      

  3.   

    话说有必要这么精确么?
    你mousedown 再mouseuo,再now-lastclicktime,再formatdatetime('s',now-lastclicktime)再将这个值转化成数值,这几百毫秒已经过去了
      

  4.   

    定义一个全局的DWORD对象,如:
    private
        dwTick: DWORD;初始化一下:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      dwTick := 0;
    end;然后在按钮的点击事件中:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if GetTickCount - dwTick < 500 then Exit;
      
      // 继续后续操作   // 最后
       dwTick := GetTickCount;
    end;
      

  5.   

    ttimer和sleep都不能满足精确的需要,因为受线程制约,所以只能是近似
      

  6.   

    妖哥那答案已经很给力了啊.
    用 gettickcount 就行了.  找一个变量记录时间 每次用Gettickcount去减他
      

  7.   


    其实我的环境是在90w条记录要让专人一条条仔细查看,找出问题,有的员工就按下enter不动,一下就看过几十条,我要防止他这样,所以要设置个时间间隔