ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

ShowModal não funciona!

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
vortuas
Novato
Novato


Registrado: Quinta-Feira, 28 de Agosto de 2014
Mensagens: 6

MensagemEnviada: Qua Jul 01, 2015 1:53 pm    Assunto: ShowModal não funciona! Responder com Citação

Usava o XE7 e funcionava muito bem como procedure anônima, mas desde que atualizei para o XE8 nenhum show modal mais funciona pro android!

Dá um erro de:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views

Já procurei muito na internet e não achei uma solução pra isso, inclusive no stackoverflow achei um tópico falando sobre isso dizendo pra eu mudar a propriedade de BorderStyle para Single, mas não funcionou! Será que alguém pode me ajudar?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Qua Jul 15, 2015 1:32 am    Assunto: Responder com Citação

Consegui ver a solução para isso no xe8 olhando este link aqui:
http://community.embarcadero.com/index.php/forum/programming/781-showmodal-on-osx-delphi-xe8

Me parece que o formulário deve ser declarado dentro do evento onde o showmodal vai ser disparado

exemplo:

Código:
procedure Tform1.button1Click(sender:Tobject);
var
  frm : TForm2; // <-- aqui estar o segredo
begin
  frm:= TForm2.Create(nil);
  frm.ShowModal(procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOK then
      frm.DisposeOf;
    end);
end;


Mas fique muito decepcionado em ver que o showmodal é fechado ao clicar no botão voltar do Android por isso criei eu mesmo meu próprio modal.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
deodorojunior
Novato
Novato


Registrado: Quarta-Feira, 15 de Julho de 2015
Mensagens: 5

MensagemEnviada: Qua Jul 15, 2015 2:35 pm    Assunto: Responder com Citação

No lugar do showmodal usa só show
tipo assim:

if fmenuPedidos = nil then //verifica se já está na memoria ou nao
fmenuPedidos := TfmenuPedidos.Create(Application);

fmenuPedidos.Show; //exibe

Cool
_________________
.
.
.
Aplicativos no Google Play > https://play.google.com/store/search?q=deodorojunior
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
xyber9
Novato
Novato


Registrado: Terça-Feira, 10 de Julho de 2012
Mensagens: 30

MensagemEnviada: Qua Jan 06, 2016 3:32 pm    Assunto: Responder com Citação

strak2012 escreveu:
Consegui ver a solução para isso no xe8 olhando este link aqui:
http://community.embarcadero.com/index.php/forum/programming/781-showmodal-on-osx-delphi-xe8

Me parece que o formulário deve ser declarado dentro do evento onde o showmodal vai ser disparado

exemplo:

Código:
procedure Tform1.button1Click(sender:Tobject);
var
  frm : TForm2; // <-- aqui estar o segredo
begin
  frm:= TForm2.Create(nil);
  frm.ShowModal(procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOK then
      frm.DisposeOf;
    end);
end;


Mas fique muito decepcionado em ver que o showmodal é fechado ao clicar no botão voltar do Android por isso criei eu mesmo meu próprio modal.


Na verdade não precisa disso, é só você capturar as teclas do Android e não deixar usar o voltar com o form aberto, assim que faço e funciona na boa.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
profase
Novato
Novato


Registrado: Terça-Feira, 8 de Agosto de 2017
Mensagens: 7
Localização: São Paulo

MensagemEnviada: Qui Set 20, 2018 6:06 pm    Assunto: showmodal android AJUDA Responder com Citação

strak2012 escreveu:
Consegui ver a solução para isso no xe8 olhando este link aqui:
http://community.embarcadero.com/index.php/forum/programming/781-showmodal-on-osx-delphi-xe8

Me parece que o formulário deve ser declarado dentro do evento onde o showmodal vai ser disparado

exemplo:

Código:
procedure Tform1.button1Click(sender:Tobject);
var
  frm : TForm2; // <-- aqui estar o segredo
begin
  frm:= TForm2.Create(nil);
  frm.ShowModal(procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOK then
      frm.DisposeOf;
    end);
end;


Mas fique muito decepcionado em ver que o showmodal é fechado ao clicar no botão voltar do Android por isso criei eu mesmo meu próprio modal.



Caro Amigo, estou tendo dificuldades com forms modais no android, mais precisamente com showmodal.

Pode me ajudar?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
profase
Novato
Novato


Registrado: Terça-Feira, 8 de Agosto de 2017
Mensagens: 7
Localização: São Paulo

MensagemEnviada: Qui Set 20, 2018 6:53 pm    Assunto: showmodal android AJUDA Responder com Citação

Estou com esta dificuldade, aguardar o shomodal, pra android, fechar e somente
apos isso prosseguir com a execucao da aplicacao...

Nesta rotina, o showmodal nao aguarda o fechamento do form2:

procedure TForm1.Button1Click(Sender: TObject);
var
frm2: TForm2;
begin
frm2 := TForm2.Create(nil);
ShowMessage('Antes frm2.ShowModal...');
frm2.ShowModal( procedure(ModalResult: TModalResult)
begin
if ModalResult = mrOK then ShowMessage('OK...');
// frm2.DisposeOf;
end);
//-continua processando a partir daqui mesmo com o frm2 aberto e em execucao.
// nao bloqueia ou aguarda o fechamento do frm2, como um showmodal VCL o faria.

//- se habilitar a linha abaixo, Trava a aplicacao aqui, pois fica inacessivel
// a manipulacao de frm2 pra mudar o valor de ModalResult e poder fecha-lo.
// entra em loop infinito....
//while ModalResult=mrNone do Application.ProcessMessages;

//-Mensagem exibida mesmo com o form2 aberto e em execucao.
ShowMessage('Depois frm2.ShowModal...');

// nao pode.
//Nescessito de um estado de espera ate fechar o form2 de onde
//leio variaveis ou componentes com informacoes pra serem preocessadas pela
//aplicacao
ShowMessage('Retorno: '+frm2.Edit1.Text);

frm2.DisposeOf; //ou no evento onclose, Action := TCloseAction.caFree;
end;

end;

*******************************
neste exemplo funciona perfeitamente, só que nao é um showmodal mas bem parecido:

Function mensagemConfirmacao(pMensagem : String):TModalResult;
var
MR : TModalResult;
begin
ShowMessage('Antes MessageDlg...');
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;
ShowMessage('Apos MessageDlg...');
end;

como fazer para obter um estado de espera/aguardo ate o fechamento do formmodal?

/----------------------------/
Agradecido antecipadamente.
Paulo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB