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







