Ir para conteúdo
  • Cadastre-se

dev botao

ACBrMTer - Problemas ao enviar texto para o display


Vitor Cortinovis
Ver Solução Respondido por Vitor Cortinovis,
  • Este tópico foi criado há 1628 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia. Estou tendo dificuldades em enviar textos para o display enquanto o Micro Terminal esta no meio de um processo. Por exemplo:

CarregarVendedor(CodigoVendedor);
ACBrMTer.PosicionarCursor(IP, 1, 1);
ACBrMTer.EnviarTexto(IP, 'Carregando');
ACBrMTer.PosicionarCursor(IP, 2, 1);
ACBrMTer.EnviarTexto(IP, 'Vendedor');
InformaComanda();

Queria que no display do Micro Terminal ficasse com o texto " Carregando Vendedor " enquanto estivesse no meio desse processamento.

Estava utilizando dessa forma mas não esta mais funcionando:

CarregarVendedor(CodigoVendedor);
ACBrMTer.PosicionarCursor(IP, 1, 1);
ACBrMTer.EnviarTexto(IP, 'Carregando');
ACBrMTer.PosicionarCursor(IP, 2, 1);
ACBrMTer.EnviarTexto(IP, 'Vendedor');
Application.ProcessMessage;
Slepp(2000);
InformaComanda();

Alguma sugestão para meu caso? 

Aguardo respostas!

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O Sleep irá congelar a aplicação servidora... e com isso ela deixará de responder todos os demais Microterminais

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Minha dificuldade é enviar o texto sem sair de uma rotina. Exemplo:

procedure TfrmMTerTeste.InserirItens(cIP: String; codVenda: Integer; codProduto: Int64; nQtd: Double);
var
  lCommit: Boolean;
begin
    lCommit := InserirItens(cIP, codVenda, 'VENDEDOR', codProduto, nQtd);
    if(lCommit)then
    begin
      MicroTerminal.LimparDisplay(cIP);
      MicroTerminal.PosicionarCursor(cIP, 1, 1);
      MicroTerminal.EnviarTexto(cIP, '     Item');
      MicroTerminal.PosicionarCursor(cIP, 2, 1);
      MicroTerminal.EnviarTexto(cIP, '   Inserido!');
      MicroTerminal.PosicionarCursor(cIP, 1, 17);
      Application.ProcessMessages;
      Sleep(500);
      Desbloquear(cIP, codComanda, codVenda);
    end;
end;

Eu preciso que apareça no display " Item Inserido " antes de ir pra função de desbloquear, pois na função desbloquear ira aparecer outro texto.

Como poderia resolver?

Editado por Vitor Cortinovis
Faltou explicação
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você está pensando de forma procedural... usando Sleep para forçar pausas...

Use os recursos da linguagem, como Timers, etc...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Veja o Demo do ACBrMTER.. lá as diversas fases da venda são tratadas, usando a técnica de "Máquina de Estado"

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Solution

Boa noite. Resolvi meu problema criando uma procedure Delay para que o sistema fique esperando a mensagem ser exibida e fechada para continuar a ser executado.

https://showdelphi.com.br/dica-como-implementar-a-funcao-delay-do-pascal-delphi/

Para mais informações de como montar a função de "Delay", segue o link a cima da estrutura da função para quem estiver com o mesmo problema que o meu.

Para aplicar a função, basta:

procedure Esperar(dwMilliseconds: Longint);
var
  iStart, iStop: DWORD;
begin
  iStart := GetTickCount;
  repeat
    iStop := GetTickCount;
    Application.ProcessMessages;
    Sleep(1);
  until (iStop - iStart) >= dwMilliseconds;
end;
  
  
procedure CarregarVendedor(codVendedor: Integer; cIP: String);
begin
  BuscaVendedor(codVendedor);
  ACBrMTer.LimparDados(cIP);
  ACBrMTer.EnviarTexto(cIP, 'Carregando');
  ACBrMTer.PosicionarCursor(cIP, 2, 1);
  ACBrMTer.EnviarTexto(cIP, 'Vendedor');
  Esperar(2000); // 2000 corresponde a 2 segundos, por exemplo
  CarregarComanda(cIP);
end;

Fica um exemplo de uso para quem precisar de ajuda para prosseguir com a implementação em seu projeto.

Por meio de pesquisa e estudo do codigo-fonte, Demo do ACBr, fontes externas, consegui aplicar esse método.

Tópico resolvido.

Editado por Vitor Cortinovis
  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1628 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...