 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
marcelo_tux Aprendiz

Registrado: Terça-Feira, 2 de Abril de 2013 Mensagens: 230 Localização: São José do Rio Preto - SP
|
Enviada: Ter Mai 28, 2019 4:48 pm Assunto: Delphi Rio. |
|
|
Boa tarde pessoal.
Eu testei uma aplicação feita em delphi tokyo no delphi Rio.
E reparei que o Application.ProcessMessages; não funciona mais nele.
Exemplo que estou testando :
No sincronismo que fazia antes eu eu recebia de retorno da função a quantidade de registros atualizados no app , então seria mais ou menos assim :
qtdregistros.text := funcaogetclientes;
Application.ProcessMessages;
qtdregistros1.text := funcaogetprodutos;
Application.ProcessMessages;
qtdregistros2.text := funcaogetvendedores;
Application.ProcessMessages;
Com isso após o sincronismo , meu label recebia a quantidade retornada pela função.
Com o Delphi Rio isso não funciona mais.
Alguém teria um idéia de como solucionar isso ? _________________ Porgramador Delphi - Mobile |
|
Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
|
Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Ter Jun 11, 2019 9:45 pm Assunto: |
|
|
Amigo achei outra solução melhor, devemos fugir sempre que possível do application.processMessages, ainda mais para ambiente mobile.
Acompanha este tópico:
https://en.delphipraxis.net/topic/924-delphi-rio-android-applicationprocessmessages-dosent-work/
Em resumo este método funcionava no tokyo:
Código: | ProgressBar1.Value:=0;
ProgressBar1.Max:=100;
for I := 0 to 100 do
begin
ProgressBar1.Value:=I;
application.ProcessMessages;
sleep(100);
end; |
Todavia no Rio ele congela e não funciona mais.
Como alternativa use deste modo:
Código: | ProgressBar1.Value : =0;
ProgressBar1.Max := 100;
Timer1.Enabled := True;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Value := ProgressBar1.Value + 1;
if ProgressBar1.Value >= ProgressBar1.Max then
begin
Timer1.Enabled := True;
Exit;
end;
//...
end; |
Fiz o teste e deu certinho, o tokyo tinha uns furos pelo que entendi, o Rio já em mais fechado, em tese realmente não é pra funcionar seu código pq estaria errado mesmo, eu demorei a entender isso, no meu app deu uns probleminha depois que migrei também, com umas imagens q eu usava false ou true.
Ou usemos Threads, pois Tarefas de longa duração devem ser executadas em segundo plano, separadas da interface.
Duvidas avisa ai.. _________________ - Compartilhe seus conhecimentos - |
|
Voltar ao Topo |
|
 |
marcelo_tux Aprendiz

Registrado: Terça-Feira, 2 de Abril de 2013 Mensagens: 230 Localização: São José do Rio Preto - SP
|
Enviada: Qua Jun 12, 2019 10:40 am Assunto: |
|
|
Obrigado pela resposta.
Eu já havia visto este post, inclusive tanto o timer quanto a thread funcionou em partes.
O meu problema é que tenho 4 funcões , getvendedor,getcliente,getproduto e getcondicao.
Cada uma delas conectam no meu webservice feito em delphi e sincroniza os dados. Depois que coloquei no Rio , elas não funcionam . Já debuguei e vi que ela para no request.execute da ultima funcão, ou seja independente de qual se ja a ultima, ele sincroniza 3 somente, a 4 ela trava , nao da erro, nao retorna nada do servidor, simplesmente para no get da ultima função.
Exemplo : sincronizou, vendedor atualizei a tela, atualizou o cliente atualizei a tela, atualizou o produto atualizei a tela, quando chega na condição ele para não da prosseguimento e também não gera erro algum nem no servidor nem no aparelho. _________________ Porgramador Delphi - Mobile |
|
Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Qui Jun 13, 2019 11:24 am Assunto: |
|
|
E se tentar usar uma TThread, o meu caso era mais simples que o seu, todavia testei com um timer e com thread ambos deram certo, tive que adaptar aqui, testa assim
**ambos os casos SEM application.ProcessMessages;
http://eduardobinotto.blogspot.com/2014/03/threaddelphi-anonymous-thread.html
Código: | procedure TFormPrincipal.Button1Click(Sender: TObject);
//var MyThread: TThread;
begin
ProgressBar1.Value :=0;
ProgressBar1.Max :=100;
ProgressBar2.Value :=0;
ProgressBar2.Max :=100;
{MyThread := TThread.CreateAnonymousThread(procedure var i:integer;
begin
for i := 0 to 100 do
begin
TThread.Synchronize(MyThread, procedure
begin
ProgressBar1.Value := i;
ProgressBar2.Value := i*2;
end);
Sleep(100);
end
end);
MyThread.Start; }
TThread.CreateAnonymousThread(procedure var i:integer;
begin
for i := 0 to 100 do
begin
TThread.Synchronize(TThread.CurrentThread, procedure
begin
ProgressBar1.Value := i;
ProgressBar2.Value := i*2;
end);
Sleep(100);
end
end).Start;
end; |
_________________ - Compartilhe seus conhecimentos - |
|
Voltar ao Topo |
|
 |
marcelo_tux Aprendiz

Registrado: Terça-Feira, 2 de Abril de 2013 Mensagens: 230 Localização: São José do Rio Preto - SP
|
Enviada: Qui Jun 13, 2019 11:30 am Assunto: |
|
|
Já testei também assim.
O problema é alguma limitação não sei existente no android com o Delphi Rio.
Se eu rodar o que ti falei tanto com thread ou timer no win32 roda normal, quando colcoa o mesmo codigo no android com o delphi rio ele não vai.
È alguma limitação ou bloqueio de conexao, limite de transação em rede simultanêa , alguma coisa assim.
Outro teste que fiz. Compilo esse mesmo codigo do Delphi rio com o tokyo , funciona normal.
Outro detalhe , um exemplo igual esse seu tambem funciona, o problema é quando usa conexoes de rede .
Deve ser porque preciso de 4 sincronismos no servidor, com thread , elas são feitas simultaneas , não espera uma pra começar a outra. Ai da o problema. _________________ Porgramador Delphi - Mobile |
|
Voltar ao Topo |
|
 |
aalmeidasp Aprendiz

Registrado: Segunda-Feira, 24 de Mai de 2010 Mensagens: 191
|
Enviada: Seg Ago 19, 2019 11:22 am Assunto: |
|
|
marcelo_tux escreveu: | Já testei também assim.
O problema é alguma limitação não sei existente no android com o Delphi Rio.
Se eu rodar o que ti falei tanto com thread ou timer no win32 roda normal, quando colcoa o mesmo codigo no android com o delphi rio ele não vai.
È alguma limitação ou bloqueio de conexao, limite de transação em rede simultanêa , alguma coisa assim.
Outro teste que fiz. Compilo esse mesmo codigo do Delphi rio com o tokyo , funciona normal.
Outro detalhe , um exemplo igual esse seu tambem funciona, o problema é quando usa conexoes de rede .
Deve ser porque preciso de 4 sincronismos no servidor, com thread , elas são feitas simultaneas , não espera uma pra começar a outra. Ai da o problema. |
Eu tenho o mesmo problema com um projeto meu. Vou ter que revisar toda a lógica do programa. Eu fiz um jogo para Android e ele funciona muito bem para Delphi Seattle, porém quando compilo e rodo no Delphi Rio dá vários problemas. |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|