Ir para conteúdo
  • Cadastre-se

dev botao

TEF Sitef: Como abrir novo form para apresentar o QrCode


Recommended Posts

  • Membros Pro

Boa tarde.

Na fase final de configuração, e conforme o manual do Sitef, quando apresentado o QrCode para PIX, deve haver a possibilidade de cancelar o QrCode, por desistência do cliente por exemplo.

No Evento QuandoExibirQRCode já inseri a criação do form que mostrará o QrCode, só não consigo fazer com o que o foco fique nele pra que eu possa clicar num botão de cancelamento da operação.

procedure TfMenu.TEFAPIQuandoExibirQRCode(const DadosQRCode: String);
var
   QRCode: TDelphiZXingQRCode;
   QRCodeBitmap: TBitmap;
   Row, Column: Integer;
begin
   if DadosQRCode <> '' then begin
      if not FormExiste(fTEFExibeQrCode) then
         Application.CreateForm(TfTEFExibeQrCode, fTEFExibeQrCode);
   end else begin
      if FormExiste(fTEFExibeQrCode) then
         FechaForm(fTEFExibeQrCode);
      Exit;
   end;

   QRCode       := TDelphiZXingQRCode.Create;
   QRCodeBitmap := TBitmap.Create;
   try
      QRCode.Encoding      := qrUTF8BOM;
      QRCode.QuietZone     := 2;
      QRCode.Data          := widestring(DadosQRCode);

      QRCodeBitmap.Width   := QRCode.Columns;
      QRCodeBitmap.Height  := QRCode.Rows;

      for Row := 0 to QRCode.Rows - 1 do begin
         for Column := 0 to QRCode.Columns - 1 do begin
            if (QRCode.IsBlack[Row, Column]) then
               QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack
            else
               QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
         end;
      end;

      with fTEFExibeQrCode do begin
         prog.Max := LConfTerm('TEFPIX_SLEEP',5);
         if prog.max = 0 then
            prog.max := 300000;
         imgQRCode.Picture.Bitmap.Assign(QRCodeBitmap);
         Timer1.Enabled := True;
         Show;
         Refresh;
      end;

      //Sleep(LConfTerm('TEFPIX_SLEEP',5));
   finally
      QRCode.Free;
      QRCodeBitmap.Free;
   end;
end;

Obs: Inseri um timer e um progressBar no form criado pra mostrar o andamento do tempo para efetuar o PIX.

 

No form criado, inseri um botão Setando uma variavel global para "iCanceladoPeloOperador := TRue;"

procedure TfTEFExibeQrCode.BotaoFecharClick(Sender: TObject);
begin
   fMenu.iCanceladoPeloOperador := TRue;
   Close;
end;

 

E no evento QuandoEsperarOperacao verifico essa variavel global:

procedure TfMenu.TEFAPIQuandoEsperarOperacao(
  OperacaoAPI: TACBrTEFAPIOperacaoAPI; var Cancelar: Boolean);
begin
  if iCanceladoPeloOperador then begin
     iCanceladoPeloOperador := False;
     Cancelar := True;
  end;
end;

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O ideal seria não usar um Form ShowModal... esse tipo de formulário costuma bloquear a execução da aplicação...

Mas o que exatamente não funciona ?

O Botão não fecha o Form ?

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

  • Moderadores
15 horas atrás, Mario Inacio disse:

Boa tarde.

Na fase final de configuração, e conforme o manual do Sitef, quando apresentado o QrCode para PIX, deve haver a possibilidade de cancelar o QrCode, por desistência do cliente por exemplo.

No Evento QuandoExibirQRCode já inseri a criação do form que mostrará o QrCode, só não consigo fazer com o que o foco fique nele pra que eu possa clicar num botão de cancelamento da operação.

procedure TfMenu.TEFAPIQuandoExibirQRCode(const DadosQRCode: String);
var
   QRCode: TDelphiZXingQRCode;
   QRCodeBitmap: TBitmap;
   Row, Column: Integer;
begin
   if DadosQRCode <> '' then begin
      if not FormExiste(fTEFExibeQrCode) then
         Application.CreateForm(TfTEFExibeQrCode, fTEFExibeQrCode);
   end else begin
      if FormExiste(fTEFExibeQrCode) then
         FechaForm(fTEFExibeQrCode);
      Exit;
   end;

   QRCode       := TDelphiZXingQRCode.Create;
   QRCodeBitmap := TBitmap.Create;
   try
      QRCode.Encoding      := qrUTF8BOM;
      QRCode.QuietZone     := 2;
      QRCode.Data          := widestring(DadosQRCode);

      QRCodeBitmap.Width   := QRCode.Columns;
      QRCodeBitmap.Height  := QRCode.Rows;

      for Row := 0 to QRCode.Rows - 1 do begin
         for Column := 0 to QRCode.Columns - 1 do begin
            if (QRCode.IsBlack[Row, Column]) then
               QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack
            else
               QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
         end;
      end;

      with fTEFExibeQrCode do begin
         prog.Max := LConfTerm('TEFPIX_SLEEP',5);
         if prog.max = 0 then
            prog.max := 300000;
         imgQRCode.Picture.Bitmap.Assign(QRCodeBitmap);
         Timer1.Enabled := True;
         Show;
         Refresh;
      end;

      //Sleep(LConfTerm('TEFPIX_SLEEP',5));
   finally
      QRCode.Free;
      QRCodeBitmap.Free;
   end;
end;

Obs: Inseri um timer e um progressBar no form criado pra mostrar o andamento do tempo para efetuar o PIX.

 

No form criado, inseri um botão Setando uma variavel global para "iCanceladoPeloOperador := TRue;"

procedure TfTEFExibeQrCode.BotaoFecharClick(Sender: TObject);
begin
   fMenu.iCanceladoPeloOperador := TRue;
   Close;
end;

 

E no evento QuandoEsperarOperacao verifico essa variavel global:

procedure TfMenu.TEFAPIQuandoEsperarOperacao(
  OperacaoAPI: TACBrTEFAPIOperacaoAPI; var Cancelar: Boolean);
begin
  if iCanceladoPeloOperador then begin
     iCanceladoPeloOperador := False;
     Cancelar := True;
  end;
end;

 

 

 

 

faz ele vir pra frente se ele já está criado ou mesmo após a criação e exibição

bringtofront acho que é esse o comando no form

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia.

Na verdade vou ver como se comporta na homologação, pois o Sitef Demo não pára pra pagamento do QrCode, ele mostra e já autoriza.

Pra contornar, e apresentar o QRcode, o suporte da Software Express sugerir colocar um Sleep após apresentar, e é isso que está causando o travamento com certeza.

Vou fazer a homologação e qualquer retorno e abro um novo ticket.

Podem fechar esse.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
9 minutos atrás, Mario Inacio disse:

Bom dia.

Na verdade vou ver como se comporta na homologação, pois o Sitef Demo não pára pra pagamento do QrCode, ele mostra e já autoriza.

Pra contornar, e apresentar o QRcode, o suporte da Software Express sugerir colocar um Sleep após apresentar, e é isso que está causando o travamento com certeza.

Vou fazer a homologação e qualquer retorno e abro um novo ticket.

Podem fechar esse.

Obrigado

Não é só ele. Paygo também.

tudo é aprovado. tu só vai conseguir testar isso em produção em ambos as soluções

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

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.