fbpx

Delphi XE7 Android e Dialogs, o que mudou?

MessageDlg com Delphi XE7

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.

Exemplo MessageDlg com Delphi XE7

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:

Erro MessageDlg Blocking - Delphi XE7

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

,

Comente