0

TIdHTTPで使用するプロキシアドレスのリスト(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

もちろん。これが1つの方法です:

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いずれかから簡単に呼び出すことができる独自のスタンドアロンメソッドに移動します。そのメソッドにパラメータとしてを渡すことができます。それはあなたのコードをずっときれいにするでしょう、IMO。ListBox.OnClickTimer.OnTimerListBox1.Items[ListBox1.ItemIndex]

于 2012-07-18T13:27:50.920 に答える