Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2013, 07:25   #1
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию Indy в Delphi XE5 (Android Dev)

Доброго Времени суток!

Вот этот код без изменений взят из десктопной версий под Windows
Код:
procedure TInformer.Timer1Timer(Sender: TObject);
var
  MsgCount, MsgId: Integer;
  MsgArr: array of Integer;
begin
  with IdIMAP41 do
  begin
    if (Connected) then
    begin
      try
        if SelectMailBox('Inbox') then // выбираем папку
        begin
          Memo1.Lines.Add('Inbox');
          MsgCount := MailBox.TotalMsgs; // Кол-во сообщений
          Memo1.Lines.Add('TotalMsgs=' + IntToStr(MsgCount));
          if MsgCount >= 1 then
          begin
            MsgId := 1; // первое непрочтенное (MailBox.FirstUnseenMsg)
            if MsgId >= 1 then // Есть ли непрочитанные письма?
            begin
              while MsgId <= MsgCount do // пробегаем по всем письмам
              begin
                if not CheckMsgSeen(MsgId) then // если письмо непрочтенное, то
                begin
                  IdMessage1.Clear;
                  sBody.Clear;

                  RetrieveHeader(MsgId, IdMessage1); // получаем заголовок
                  if (IdMessage1.From.Address = Sign) then
                  // только от этого адресата
                  begin
                    Retrieve(MsgId, IdMessage1); // полчуаем всё письмо
                    if not IdMessage1.IsBodyEmpty then // если не пустое, то
                    begin
                      sBody.Assign(IdMessage1.Body); // получаем текст сообщения
                      BodyProcessing; // вызываем процедуру парсинга
                    end;
                    MailBox.Flags := [mfSeen]; // письмо прочтенное

                    // подготавливаем массив для удаления
                    SetLength(MsgArr, 1);
                    MsgArr[0] := MsgId;

                    if DeleteMsgs(MsgArr) then // удаляем письмо
                    begin
                      // не уверен что правильно, но вроде работает
                      Finalize(MsgArr[0], 1);
                      SetLength(MsgArr, 0);
                    end;
                  end;
                end;
                Application.ProcessMessages; // чтобы не замерала
                inc(MsgId); // идем дальше
              end;
            end;
          end;
        end;
      except
        on e: Exception do
        begin
          ShowMessage('Проверьте :' + #13#10 +
            '   Введенные данные (Логин - Пароль)'#13#10 +
            '   Интернет Соединение!');
          pfLogOfClick(nil);
        end;
      end;
    end
    else
    begin
      ShowMessage('Проверьте :' + #13#10 +
        '   Введенные данные (Логин - Пароль)'#13#10 +
        '   Интернет Соединение!');
      pfLogOfClick(nil);
    end;
  end;
end;
Он рабочий! перенес его в андроид приложение и... пусто. приложение замерзает. не реагирует на какие либо действия. хотя авторизация проходит успешно!

Кто нибудь в курсе, как можно это решить?
ZuBy вне форума Ответить с цитированием
Старый 30.09.2013, 09:37   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

в каком месте замирает? Пошагово пробовали пройти?
Dozent вне форума Ответить с цитированием
Старый 30.09.2013, 10:34   #3
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

методом исключения пробегал

начиная с этой строки и все что после
Код:
 if not CheckMsgSeen(MsgId) then // если письмо непрочтенное, то
ZuBy вне форума Ответить с цитированием
Старый 30.09.2013, 13:03   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

заходите в функию и трассируете дальше=) Судя по всему, функция так же ваша.
Человек_Борща вне форума Ответить с цитированием
Старый 30.09.2013, 13:45   #5
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
заходите в функию и трассируете дальше=) Судя по всему, функция так же ваша.
нет функция родная, т.е. IdIMAP41.CheckMsgSeen(MsgId)
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rad Studio XE5 (Delphi for Android) ZuBy Обсуждение статей 51 25.09.2013 20:50
Непонятная ситуация с IdUDPServer1 в XE5 Mars2107 Общие вопросы Delphi 3 19.09.2013 15:08
Delphi xe5 хранение настроек на android saragosa Общие вопросы Delphi 2 17.09.2013 13:18
Запись параметров (Android Dev) ZuBy Общие вопросы Delphi 0 16.09.2013 07:02
У меня borland developer studio delphi 2006 так вот как вставить на вкладку tool palette компоненты Indy Clients и Indy Misc Artem_host Общие вопросы Delphi 0 01.02.2012 09:55