我在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,但是如何?
答案 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。