如何定期处理列表框的下一项?

时间:2012-07-18 13:16:09

标签: delphi timer listbox

我在TListBox中有一个代理地址列表(1.2.42.x.2.4:42,2.4.1.x.1.2.x.2:60等),我在TIdHTTP中使用它。单击按钮时,我使用所选代理获取给定的URL:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  S: String;
begin
  I := Listbox1.ItemIndex;
  if I <> -1 then
  begin
    S := Listbox1.Items[I];
    IdHTTP1.ProxyParams.ProxyServer := Fetch(S, ':');
    IdHTTP1.ProxyParams.ProxyPort := StrToInt(S);
    try
      IdHTTP1.ReadTimeout:=strtoint(form1.Edit1.Text); // ZMAAN AŞIMI
      IdHTTP1.Get(Edit4.Text);                         // POST GET
      MessageDlg('Ok.', mtinformation,[mbOK],0); // TAMAMLANDI.
    except
      MessageDlg('Error.', mtinformation,[mbOK],0);   // HATA VERDİ.
      IdHTTP1.Disconnect;   // ÖLDÜR.
    end;
  end;
end;

单击按钮后,我希望我的程序自动执行与上面相同的操作,但是使用ListBox1.Items [1],然后使用ListBox1.Items [2],依此类推。

我想我可以使用TTimer,但是如何?

1 个答案:

答案 0 :(得分:2)

当然。这是一种方式:

procedure TForm1.ListBox1Click(Sender: TObject);
var
  I: Integer;
  S: String;
begin
  I := Listbox1.ItemIndex;
  if I <> -1 then
  begin
    S := Listbox1.Items[I];
    IdHTTP1.ProxyParams.ProxyServer := Fetch(S, ':');
    IdHTTP1.ProxyParams.ProxyPort := StrToInt(S);
     try
      IdHTTP1.ReadTimeout:=strtoint(form1.Edit1.Text); // ZMAAN AŞIMI
      IdHTTP1.Get(Edit4.Text);                         // POST GET
      MessageDlg('Ok.', mtinformation,[mbOK],0); // TAMAMLANDI.
    except
      MessageDlg('Error.', mtinformation,[mbOK],0);   // HATA VERDİ.
      IdHTTP1.Disconnect;   // ÖLDÜR.
    end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  try
    ListBox1Click(nil);
    if ListBox1.ItemIndex < ListBox1.Items.Count - 1 then
      ListBox1.ItemIndex := ListBox1.ItemIndex + 1
    else
      ListBox1.ItemIndex := -1;
  finally
    // To stop after only one loop through all items, as you asked in your comment:
    Timer1.Enabled := (ListBox1.ItemIndex > -1);
  end;
end;

我个人会将ListBox1Click事件中的几乎所有代码移动到它自己的独立方法中,您可以轻松地从ListBox.OnClick事件或Timer.OnTimer事件中调用它。您可以将ListBox1.Items[ListBox1.ItemIndex]作为参数传递给该方法。这将使你的代码更清洁,IMO。