Ir para conteúdo
  • Cadastre-se

dev botao

Formulários FMX com ACBRTEFD


  • Este tópico foi criado há 148 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá boa tarde!

Estou criando um emissor de NFC utilizando o Delphi Alexandria em um projeto para windows com formulários FMX. Porém, ao executar qualquer operação utilizando o TEF pela segunda vez o sistema gera uma violação de acesso.

Primeiro eu achei que fosse porque estava usando os componentes sendo criados em runtime através de uma classe, então adicionei um DM e adicionei todos os componentes e passei os códigos dos eventos para ele. Devo frisar que o código que estou utilizando é uma cópia do projeto de exemplo, a única mudança foi as telas que o TEFD utiliza foram criadas como FMX ao invés de VCL como no exemplo.

Fazendo um debug tive a impressão que o problema ocorre quando executa como modal (ShowModal), mas não posso afirmar com certeza.

Grato pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não vejo problemas em usar formulários em FMX

Os componentes do ACBr são não visuais, ou seja, não usam a VCL

Eu recomendaria você usar o ACBrTEFAPI, pois o ACBrTEFD é mais antigo, e depende da emulação de estados do ECF

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

Em 19/10/2023 at 17:42, Daniel Simoes disse:

Não vejo problemas em usar formulários em FMX

Os componentes do ACBr são não visuais, ou seja, não usam a VCL

Eu recomendaria você usar o ACBrTEFAPI, pois o ACBrTEFD é mais antigo, e depende da emulação de estados do ECF

Olá bom dia, obrigado pela resposta ! Conforme sugerido fiz a mudança do TEFD para o API e mesmo assim ocorre um problema ao tentar abrir um segundo formulário. Tentei instalar o acbr usando como diretiva o FMX conforme um vídeo no Youtube (

) alterando o ACBR.inc porém não instala todos os componentes como por exemplo os danfes. Voltado para VCL instala tudo normalmente, então acrescentei no projeto a diretiva FMX e fiz um build, porem também resultou no mesmo problema.

Fiz um protótipo para exemplificar minha situação. O exemplo copia o demo do AcbrTEFAPI, porém somente com a função administrativa.

Desde já agradeço a ajuda.

Teste_TEF.zip

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por favor anexe o Log gerado pelo ACBrTEFAPI, e indique o momento onde ocorre o A.V.

Você não precisa mudar o .INC.. ajuste no Projeto.. veja esse tópico:

 

Estou sem Pinpad no momento...

Em qual linha do fonte do seu projeto, ocorre o A.V. ?
(vá passo a passo com o Debug - F7)

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

Estou sem Pinpad no momento...

Em qual linha do fonte do seu projeto, ocorre o A.V. ?
(vá passo a passo com o Debug - F7)

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

Essa construção parece errada..

    FormObtemCampo.ShowModal(procedure(ModalResult: TModalResult)
    begin
      MR := ModalResult;
    end);

Para programação assíncrona, você teria que tratar todo o retorno, dentro da Procedure... Veja exemplos no Demo em Android

provavelmente ocorre o A.V., porque o valor atribuído a variável MR irá sair do contexto, quando sair da procedure...

Creio que você possa substituir o código acima, para:

    MR := FormObtemCampo.ShowModal;

 

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

Agora, Daniel Simoes disse:

Essa construção parece errada..

    FormObtemCampo.ShowModal(procedure(ModalResult: TModalResult)
    begin
      MR := ModalResult;
    end);

Para programação assíncrona, você teria que tratar todo o retorno, dentro da Procedure... Veja exemplos no Demo em Android

provavelmente ocorre o A.V., porque o valor atribuído a variável MR irá sair do contexto, quando sair da procedure...

Creio que você possa substituir o código acima, para:

    MR := FormObtemCampo.ShowModal;

 

Das duas formas o problema acontece, essa que está ai foi uma tentativa.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O problema não parece ter relação com o TEF em si... mas com a construção de aplicações em FMX...

Tente mudar isso:

  FormObtemCampo := TFrm_mbl_TEF_ObtemCampo.Create(Nil);

Pois você está destruindo o Form, e não o "Application"

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

39 minutos atrás, Daniel Simoes disse:

O problema não parece ter relação com o TEF em si... mas com a construção de aplicações em FMX...

Tente mudar isso:

  FormObtemCampo := TFrm_mbl_TEF_ObtemCampo.Create(Nil);

Pois você está destruindo o Form, e não o "Application"

Olá boa tarde, já foi tentado com o Application, Self (conforme está no exemplo) e nil, em todos ocorre o mesmo erro na linha onde executa o showmodal.

Link para o comentário
Compartilhar em outros sites

57 minutos atrás, Daniel Simoes disse:

o problema pode estar dentro do Form que está sendo criado... acompanhe o Onshow dele, no Debug

Fiz um novo formulário acrescentando as propriedades uma a uma e compilava debugando mas mesmo colocando todas as propriedades o erro ocorre na unit da imagem anexo.

Conforme disse criando um formulário vazio ou com as propriedades que a função exige, ocorre sempre o mesmo problema no ponto indicado na imagem. A aplicação está com a diretiva FMX.

Mas independente da diretiva o problema ocorre.

Perdão pelo texto, não sei se fui claro.

Erro_Teste_TEF.png

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Eu realmente não sei o que pode ser... o código que você mostrou é dos fontes do Delphi...

Talvez seja bom acionar o suporte da Embarcadero

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

41 minutos atrás, Daniel Simoes disse:

Eu realmente não sei o que pode ser... o código que você mostrou é dos fontes do Delphi...

Talvez seja bom acionar o suporte da Embarcadero

Ok, iremos entrar em contato com o pessoal da Embarcadero, porem fiz o seguinte teste, peguei o formulário em questão e executei passando os parâmetros fixos por fora do evento do componente e o formulário abriu e fechou normalmente por diversas vezes.

Grato.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
8 minutos atrás, Enderson disse:

peguei o formulário em questão e executei passando os parâmetros fixos por fora do evento

não compreendi essa questão... tem algum exemplo de código ?

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

Eu não vejo diferenças nas chamadas...

Verifique se o evento está sendo chamado de forma recorrente, ou seja, ele está chamando o evento várias vezes, de forma recursiva... isso estoura a pilha, que causa um A.V.

No Log do ACBrTEFAPI, ficam registradas todas as chamadas ao evento

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

Agora, Daniel Simoes disse:

Eu não vejo diferenças nas chamadas...

Verifique se o evento está sendo chamado de forma recorrente, ou seja, ele está chamando o evento várias vezes, de forma recursiva... isso estoura a pilha, que causa um A.V.

No Log do ACBrTEFAPI, ficam registradas todas as chamadas ao evento

Não está chamando o evento várias vezes porque o processo é o seguinte: clico no botão onde executa a função administrativa do TEF, como ainda não está instalado, aparece poucas opções com a primeira "Instalar" e a segunda "Configurar", então clico na segunda (Configurar) ai já trava. Tentei também em Instalar, gera erro também.

Link para o comentário
Compartilhar em outros sites

Olá, Estou implementando o TEFAPI no FMX da mesma forma que você.... Estou perdendo os cabelos aqui com o mesmo erro no evento quandoPerguntarMenu.... Na primeira vez que chama o form funciona OK... na segunda  da acces violation.... Já tentei de tudo e nada. Destruí todos os formulários, free, release, nil... recriei... e NADA..... Alguém conseguiu a solução??? comparei os logs da minha aplicação e da aplicação TESTE e são iguais...

Link para o comentário
Compartilhar em outros sites

Em 02/11/2023 at 01:10, William Di Domenico disse:

Olá, Estou implementando o TEFAPI no FMX da mesma forma que você.... Estou perdendo os cabelos aqui com o mesmo erro no evento quandoPerguntarMenu.... Na primeira vez que chama o form funciona OK... na segunda  da acces violation.... Já tentei de tudo e nada. Destruí todos os formulários, free, release, nil... recriei... e NADA..... Alguém conseguiu a solução??? comparei os logs da minha aplicação e da aplicação TESTE e são iguais...

Olá boa tarde, tive que dar uma pausa e agora voltei. Fiz o seguinte teste, no formulário "Obtem campo", comentei todos os métodos e eventos, não abriu, retirei todos os objetos deixando o formulário sem nada, abril com uma mensagem de erro: "Invalid pointer operation". Fui voltando objeto por objeto até que voltei os botões de confirmar e cancelar, quando o fiz o sistema travou novamente. Então voltei somente o botão de "confirmar" gera a mensagem de erro acima (invalid...) porém abre a tela e funciona, informei senha ponto de captura etc. Agora quando coloco o botão de cancelar a tela não abre e o sistema trava. Outro teste feito também, foi deixar somente o botão de cancelar, a tela não abre.

No exemplo dos fontes quando é Paygoweb pede-se para deixar a propriedade visível com false, mesmo deixando a propriedade como false o travamento ocorre.

Se essa informação e alguém tiver alguma dica, agradeço.

Erro_Tef.png

Link para o comentário
Compartilhar em outros sites

Estou achando q terei que fazer uma aplicação VCL, e chamá-la dentro do FMX…. Pelo jeito FMX não tem compatibilidade… transformei meu form em classe e estou criando tudo em tempo de execução… Segue o mesmo erro… o bom é q com a classe feita posso usá-la no VCL… farei os testes hj a noite…

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Olá boa tarde a todos !

Minha suspeita que a dll da paygoweb não está preparada para o Delphi FMX se dá devido ao erro que ocorre conforme o print abaixo:

image.png.04aa4688f499d5976b49f308c06ecb03.png

Inicialmente minha suspeita estava no componente, mas com a mensagem acima acredito que seja a dll.

Essa propriedade em destaque não se encontra em nenhum objeto de botão testado no FMX (TButton, TSpeedButton e TCornerButton).

Se alguém tiver alguma sugestão agradeço.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 148 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.