Se você tentou utilizar a função MessageDlg em projetos mobile com Delphi XE7 certamente notou que houve uma mudança na declaração da função. Nesta postagem vamos explicar um pouco sobre como ficou o funcionamento da mesma.
A partir da evolução do Delphi como plataforma de desenvolvimento Mobile a Embarcadero verificou que algumas apresentavam travamento, principalmente na plataforma Android. Isso se dá devido a essas funções utilizarem-se do recurso de aguardar a resposta para serem fechadas, a esse processo a documentação na Embarcadero DocWiki chama de chamada de bloqueio.
O que mudou então?
Na prática a mudança se dá com a inclusão de um método anônimo a ser utilizado para captar o botão selecionado pelo usuário.
Exemplificando MessageDlg resultante em erro
Se compilarmos e executarmos o mesmo projeto da postagem Encerrar aplicação Android através de Caixa de Diálogo com Delphi XE5 agora utilizando o Delphi XE7, nos depararemos com um erro durante sua execução no dispositivo Android vide imagem abaixo:
Note que como mencionado acima, a mensagem diz que as chamadas de bloqueio não são implementadas na plataforma.
Exemplificando MessageDlg com método anônimo
Agora utilizando o mesmo exemplo, vamos alterar o código do Evento OnCloseQuery como abaixo:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := False; MessageDlg('Deseja realmente fechar a aplicação desenvolvida no Delphi XE7?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0, procedure(const BotaoPressionado: TModalResult) begin case BotaoPressionado of mrYes: begin SharedActivity.Finish; end; mrNo: begin ShowMessage('Você respondeu não'); end; end; end ); end; end.
Vale lembrar que conforme mencionado aqui no blog algumas vezes, quando o ambiente for superior ao Delphi XE5 devemos incluir o Namespace Androidapi.Helpers na cláusula uses:
implementation uses Androidapi.Helpers;
Sua aplicação já está apta a executar a MessageDlg non Blocking, como batizada pela Embarcadero, que passou a ser utilizada nas versões superiores ao Delphi XE5.
Confira o resultado e até a próxima!
Fonte: Embarcadero DocWiki