Fórum Caixas de Dialogo no Android com Delphi Xe7 #493313
23/09/2014
0
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
Curtir tópico
+ 0Post mais votado
24/07/2015
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
Gostei + 2
Mais Posts
23/09/2014
Douglas Lucio
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.
Gostei + 0
25/09/2014
Hallysson Pereira
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
Gostei + 0
02/10/2014
Nortsys Sistemas
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;
Gostei + 1
02/10/2014
Maicon Wagner
Gostei + 0
22/05/2015
Georges Soares
Gostei + 0
29/08/2015
Leonardo Alice
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!
Gostei + 0
02/02/2016
Luis Paiva
Quero aproveitar e tirar uma duvida:
Estou desenvolvendo App's no Delphi 10 Seattle, tem como usar o MessageDlg em português?
Gostei + 0
03/05/2016
Salmo Martins
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;
Gostei + 0
03/05/2016
Salmo Martins
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);
Gostei + 0
26/09/2016
Ederaldo
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.
Gostei + 0
02/10/2016
Sysbase Informática
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)