我现在要写一个筛选器,他有很多记录,每个记录的名字用Filtername记录,每个记录都有个失效时间,Timer用来在设定的时间内使这个记录失效,
然后因为我只动态创建了一个Timer 怎么能使每个filtername 都有一个Timer,在自己的设定的时间内失效,互不影响

解决方案 »

  1.   

    用一个TIMER不停的去更新那些记录啊,无效的去掉,有效的显示.
      

  2.   

    自带的TIMER精度好像不是很高,如果你应用的地方比较重要,个人觉得还是用高精度的TIMER或者用线程
      

  3.   

    timer的精度够不够用,关键看所有记录轮询一遍的时间和失效时间比值的大小。
      

  4.   

    你的记录是不停的添加进去的吗?如果是,每添加一个记录, 就设置一下他的到期时间
    比如10秒后到期
    procedure TForm1.Button1Click(Sender: TObject);
    var
    ti:TDateTime;
    begin
      ti:=now()+0.00010;
      listbox1.Items.add(DateTimeToStr(ti));//记录到期时间
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
    i:integer;
    begin
      if listbox1.Count >= 1 then
      begin
        for I := 0 to listbox1.Count - 1 do
        begin
          if StrToDateTime(Listbox1.Items.Strings[i]) <= now() then //如果记录的时间到期
          begin
          Listbox1.Items.Delete(i);
          break;
          end;
        end;
      end;
    end;可以测试一下。
    思路:添加记录时,将到期时间算出来,记录在与数据关联的位置。
    利用Timer实时检测。时间到期的数据就删除。
    Timer1的间隔时间设置为1。精确度不高,可以去找点别的控件或方法。我记得有精确到毫秒的计时方法。