0

我在与 TIdHTTP 一起使用的 TListBox(1.2.42.x.2.4:42、2.4.1.x.1.2.x.2:60 等)中有一个代理地址列表。单击按钮时,我使用选定的代理获取给定的 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,但是如何?

4

1 回答 1

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,它会让你的代码更干净。

于 2012-07-18T13:27:50.920 回答