Android Test App выполняет шаги программирования в обратном направлении

Я использую Delphi Enterprise версии 10.2.3 с Android SDK версии 24.3.3 32-бит. Я попробовал очень простую программу всего с одной кнопкой. Onclick просто следующий:

ShowMessage('1');
ShowMessage('2');
ShowMessage('3');
ShowMessage('4');

Результат, который я получил на своем телефоне Samsung при нажатии на кнопку:

4
3
2
1

Конечно, я ожидаю получить

1
2
3
4

Это не первая моя программа для Android. Предыдущие идут без проблем. Но когда я получил странные ошибки в моей последней программе, я обнаружил, что шаги программирования выполняются в обратном порядке. Я также боюсь теперь перекомпилировать предыдущие приложения на случай, если у меня возникнет такое странное поведение. Поэтому я просто создал новую программу (выше) для тестирования, но получил те же результаты. Я также отключил антивирусную программу Avast и даже попробовал ее на другом устройстве Samsung.

Помощь будет очень признательна. В данный момент я действительно сбит с толку и не уверен, какие следующие шаги предпринять для решения проблемы. Пожалуйста, помогите мне!

2
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На мобильных платформах ShowMessage ведет себя асинхронно. Вызов завершается мгновенно, он не ждет, пока пользователь закроет диалоговое окно.

Попробуйте этот код:

function TForm1.MyShowMessage(const Msg: String): TModalResult;
var
  MR: TModalResult;
begin
  MR := mrNone;
  TDialogService.MessageDialog(Msg, TMsgDlgType.mtConfirmation,const  [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbYes, 0,
    procedure(const AResult: TModalResult)
    begin
      MR := AResult;
    end);
  while MR = mrNone do begin
    Application.ProcessMessages;
    CheckSynchronize;
  end;
  Result := MR;
end;

Спасибо, @fpiette, просто прочитав ваш пост, я многое понял.

PeetHendriks 13.12.2020 15:27

Даже несмотря на то, что ShowMessage является асинхронным, можно было бы ожидать, что он будет обработан и отображен в правильном порядке, в котором он вызывается, а не в обратном порядке. У вас есть лучшее объяснение такому поведению?

Remy Lebeau 13.12.2020 19:06

@RemyLebeau Я уверен, что это показано в правильном порядке. Причина, по которой кажется, что оно отображается в неправильном порядке, заключается в том, что для каждого сообщения создается новое самое верхнее окно. Поэтому, когда отображается первое сообщение, его окна отображаются поверх всех окон приложений. Когда отображается второе сообщение, оно снова отображается поверх всех окон приложения, включая окно из первого сообщения. Таким образом, в конце концов вы фактически показываете четыре окна сообщений одновременно, но, поскольку они имеют одинаковое относительное положение, видно только последнее (самое верхнее).

SilverWarior 13.12.2020 19:30

Использование Application.ProcessMessages на Android не поддерживается и может привести к зависанию приложения. Пример в этом ответе не является подходящим решением для чего-либо. Поскольку вопрос на самом деле не объясняет, какова реальная цель использования нескольких сообщений show подряд, невозможно дать адекватное решение проблемы, кроме утверждения, что диалоги на Android асинхронны.

Dalija Prasnikar 14.12.2020 11:01

Другие вопросы по теме