Fórum Caixas de Dialogo no Android com Delphi Xe7 #493313

23/09/2014

0

Boa Noite amigos,
Instalei o Delphi xe7, e abri uma aplicação que eu tinha, percebi que o messageDLG não esta funcionando nesta nova versão do Delphi, quando clico em algum botão que possui esta funcao implementada aparece o seguinte erro:
"Blocking dialogs not implemented on this platform"

Alguem teve esse tipo de problema também ?

No aguardo
Douglas Lucio

Douglas Lucio

Responder

Post mais votado

24/07/2015

Perfeito Nortsys!

Seu código funcionou perfeitamente, só fiz uma alteração para facilitar minha chamada.


function mensagemConfirmacao(pMensagem : String):TModalResult;
var
  MR : TModalResult;
begin
   MessageDlg(pMensagem,
              System.UITypes.TMsgDlgType.mtConfirmation,
              [System.UITypes.TMsgDlgBtn.mbYes,System.UITypes.TMsgDlgBtn.mbNo],
              0,
              procedure(const AResult: TModalResult)
              begin
                 MR:=AResult;
              end);

   while MR=mrNone do Application.ProcessMessages;
   Result:=MR;
end;




Para chamar ficou mais simples pra mim, por exemplo.


procedure TfrmHome.ListBoxItemSairClick(Sender: TObject);
begin
   if mensagemConfirmacao('Deseja fechar?') = mrYes then
      Close;
end;

Joao Fernandes

Joao Fernandes
Responder

Gostei + 2

Mais Posts

23/09/2014

Douglas Lucio

Amigos, pesquisando na internet, achei uma nota da própria embarcadero sobre o assunto,

Consegui fazer da seguinte forma,
[code] MessageDLG (msg, system.UITypes.TMsgDlgType.mtConfirmation, [
system.UITypes.TMsgDlgBtn.mbYes,
system.UITypes.TMsgDlgBtn.mbNo],0,
procedure (const AResult : TModalResult)
begin
case AResult of
mrYes :
Application.Terminate;

end;
end)

/code]

Achei mais complicado, ha outra maneira de se fazer mais fácil?
Abraços.
Responder

Gostei + 0

25/09/2014

Hallysson Pereira

Vide:
http://docwiki.embarcadero.com/RADStudio/XE7/en/What%27s_New_in_Delphi_and_C%2B%2BBuilder_XE7#Dialog_Box_Methods_Support_Anonymous_Methods_to_Handle_Their_Closing
Responder

Gostei + 0

02/10/2014

Nortsys Sistemas

bom dia Douglas,
eu criei uma função para simplificar:


function MessageBoxSys(MSG:String ; TIPO:TMsgDlgType ; BOTOES:TMsgDlgButtons):TModalResult;
var
MR:TModalResult;
begin
MessageDlg(MSG, TIPO, BOTOES, 0,
procedure(const AResult: TModalResult)
begin
MR:=AResult;
end);
while MR=mrNone do Application.ProcessMessages;
Result:=MR;
end;


Então agora eu uso o "MessageBoxSys" ao invés de "MessageDlg", dessa forma consegui o mesmo efeito do ShowModal;
Responder

Gostei + 1

02/10/2014

Maicon Wagner

up !!!
Responder

Gostei + 0

22/05/2015

Georges Soares

Nortsys, Sua função ficou blz, deu certo, obrigado por compartilhar.
Responder

Gostei + 0

29/08/2015

Leonardo Alice

Bom dia a todos.
Obrigado pelas respostas nesse tópico, me ajudaram bastante!
Só tenho uma dúvida... Não tem nenhuma opção para a mensagem vir com título e com aquelas imagens padrões de exclamação, warning, interrogação?
Obrigado!
Responder

Gostei + 0

02/02/2016

Luis Paiva

Boa noite a todos, gostei muito do pots.
Quero aproveitar e tirar uma duvida:
Estou desenvolvendo App's no Delphi 10 Seattle, tem como usar o MessageDlg em português?
Responder

Gostei + 0

03/05/2016

Salmo Martins

Ola Luis Claudio,
bom tenho uma função que possa te ajudar, nela vc pode alterar o caption dos Buttons.
tipos de Buttons: (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);

function MessageDlgDefault(Msg :String; AType: TMsgDlgType; AButtons : TMsgDlgButtons;
IndiceHelp : LongInt; DefButton : TModalResult=MrNone) : Word;
Var
I:Integer;
Mensagem:TForm;
Begin
Mensagem:=CreateMessageDialog(Msg, AType, Abuttons);
Mensagem.HelpConText:=IndiceHelp;
With Mensagem Do Begin
For i :=0 To ComponentCount -1 Do Begin
If (Components[i] is TButton) Then Begin
If (TButton(Components[i]).ModalResult=DefButton) Then Begin
ActiveControl:=TWincontrol(Components[i]);
End;
End;
End;
If Atype=mtConfirmation Then Caption := 'Confirmação'
else If AType=mtWarning Then Caption := 'Atenção'
else If AType=mtError Then Caption := 'Erro'
else If AType=mtInFormation Then Caption := 'Informação';
TButton(Mensagem.FindComponent('YES')).Caption := '&Sim';
TButton(Mensagem.FindComponent('NO')).Caption := '&Não';
TButton(Mensagem.FindComponent('ABORT')).Caption := '&Abortar';
TButton(Mensagem.FindComponent('RETRY')).Caption := '&Excel';
TButton(Mensagem.FindComponent('IGNORE')).Caption := '&Ignorar';
TButton(Mensagem.FindComponent('ALL')).Caption := '&Todos';
TButton(Mensagem.FindComponent('HELP')).Caption := '&Ajuda';
TButton(Mensagem.FindComponent('CANCEL')).Caption := '&Cancelar';
TButton(Mensagem.FindComponent('CLOSE')).Caption := '&Fechar';
// Aqui vc pode adicionar mais buttons, vai depender da sua necessidade, os TMsgDlgBtn (Buttons) estão relacionados acima.
End;
Result:=Mensagem.ShowModal;
Mensagem.Free;
End;


Como chamar a Função:
1º:
if(MessageDlgDefault('Deseja gravar parametros?', mtConfirmation, [mbNo, mbYes], 0,mrNo) = mryes) then
begin
// codigo
end;

2º:
MessageDlgDefault('Erro ao gravar parametro',mtError,[mbAbort],0);

3º:
var
Tipo:integer;
begin
Tipo := MessageDlgDefault('Qual opção você deseja?', mtConfirmation, [mbCancel, mbRetry, mbAll,], 0, mrRetry);
If Tipo = mrRetry then
begin
// Codigo
end;
if Tipo = mrall then
begin
//Codigo
end;
end;
Responder

Gostei + 0

03/05/2016

Salmo Martins

Tem mais uma com Timer;
function MessageDlgDefaultTime(Msg :String;tempo:integer; AType: TMsgDlgType; AButtons : TMsgDlgButtons;
IndiceHelp : LongInt; DefButton : TModalResult=MrNone) : Word;
Var
I:Integer;
Mensagem:TForm;
TimerMethod: TNotifyEvent;
procedure UpdateProgressBar(Data: Pointer; Sender: TObject);
var
Mensagem: TForm;
lButton: TButton;
begin
if Sender is TTimer then
begin
if TTimer(Sender).Owner is TForm then
begin
Mensagem := TForm(TTimer(Sender).Owner);
Tempo_Msg:=Tempo_Msg-1;
if Tempo_Msg<>-1 then
begin
Mensagem := TForm(TButton(Sender).Owner);
TButton(Mensagem.FindComponent('YES')).Caption := '&Sim '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('NO')).Caption := '&Não '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('ABORT')).Caption := '&Abortar '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('RETRY')).Caption := '&Excel '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('IGNORE')).Caption := '&Ignorar '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('ALL')).Caption := '&Texto '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('HELP')).Caption := '&Ajunda '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('CANCEL')).Caption := '&Cancelar '+inttostr(Tempo_Msg);
end else
begin
Mensagem.ModalResult := mrCancel;
end;
end;
end;
end;
Begin
Form1.Timer7.Enabled:=false;
Tempo_Msg:=tempo;
Mensagem:=CreateMessageDialog(Msg, AType, Abuttons);
Mensagem.HelpConText:=IndiceHelp;
With Mensagem Do Begin
For i :=0 To ComponentCount -1 Do Begin
If (Components[i] is TButton) Then Begin
If (TButton(Components[i]).ModalResult=DefButton) Then Begin
ActiveControl:=TWincontrol(Components[i]);
End;
End;
End;
If Atype=mtConfirmation Then Caption := 'Confirmação'
else If AType=mtWarning Then Caption := 'Atenção'
else If AType=mtError Then Caption := 'Erro'
else If AType=mtInFormation Then Caption := 'Informação';
TButton(Mensagem.FindComponent('YES')).Caption := '&Sim '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('NO')).Caption := '&Não '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('ABORT')).Caption := '&Abortar'+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('RETRY')).Caption := '&Excel '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('IGNORE')).Caption := '&Ignorar '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('ALL')).Caption := '&Texto '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('HELP')).Caption := '&Ajunda '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('CANCEL')).Caption := '&Cancelar '+inttostr(Tempo_Msg);
TButton(Mensagem.FindComponent('CLOSE')).Caption := '&Fechar '+inttostr(Tempo_Msg);

End;
if Tempo_Msg> 0 then
begin
with TTimer.Create(Mensagem) do
begin
Name := 'MsgTimer';
Interval := 1000;
end;
TMethod(TimerMethod).Code := Addr(UpdateProgressBar);
TMethod(TimerMethod).Data := mensagem.FindComponent('MsgTimer');
TTimer(mensagem.FindComponent('MsgTimer')).OnTimer := TimerMethod;
end;

Result:=Mensagem.Showmodal;
Form1.Timer7.Enabled:=true;
Mensagem.Free;
End;

Como chamar a função:
MessageDlgDefaultTime('Antes de iniciar iremos atualizar os dados, por favor aguarde!',tempo, mtConfirmation, [mbYes], 0,mrYes);
Responder

Gostei + 0

26/09/2016

Ederaldo

Olá! Salmo Alves Martins.

Sou novo no fórum e no Delphi Ex8. tentei compilar a sua função, mas deu erro na linha:
"Mensagem:=CreateMessageDialog(Msg, AType, Abuttons);"

A mensagem de erro é:
"[dcc32 Error] Unit1.pas(36): E2003 Undeclared identifier: 'createMessageDialog'"

O que está errado?

Saudações.

Obrigado.
Responder

Gostei + 0

02/10/2016

Sysbase Informática

Bom dia!
Também está ocorrendo o mesmo erro de compilação que deu para o Ederaldo. Constatei que a função 'CreateMessageDialog' é uma função VCL e a compilação para o Android não é possível.
Tem algum forma de contornar este problema?
Saudações,
Rafael Moroni
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar