johnbh3 Postado 23 Fevereiro Compartilhar Postado 23 Fevereiro (editado) Ola Eu estou tentando gerar pix estatatico com firemonkey funciona? Seguinte eu fiz em VCL vs Firemokey VCL funciona uses ACBrDelphiZXingQRCode,ACBrImage, ACBrPIXUtil; procedure TForm1.btQREGerarClick(Sender: TObject); begin ACBrPixCD1.Recebedor.Nome := 'SOUZA'; ACBrPixCD1.Recebedor.CEP := '31950280'; ACBrPixCD1.Recebedor.Cidade := 'BELO HORIZONTE'; ACBrPixCD1.Recebedor.UF := 'MG'; PintarQRCodeEstatico('073XXXXX8641'); end; procedure TForm1.PintarQRCodeEstatico (sChave: string); var i : integer; begin ACBrPixCD1.PSP := ACBrPSPPagSeguro1; ACBrPSPPagSeguro1.ChavePIX := sChave; i:= Integer(DetectarTipoChave(sChave)); mQRE.Lines.Text := ACBrPixCD1.GerarQRCodeEstatico( StrToFloatDef('1,00', 0), '', ''); PintarQRCode(mQRE.Lines.Text, imgQRE.Picture.Bitmap, qrUTF8BOM); end; Em FMX não funciona {$R *.fmx} uses ACBrDelphiZXingQRCode,ACBrImage, ACBrPIXUtil; procedure TForm1.btQREGerarClick(Sender: TObject); begin ACBrPixCD1.Recebedor.Nome := 'JSOUZA'; ACBrPixCD1.Recebedor.CEP := '31950280'; ACBrPixCD1.Recebedor.Cidade := 'BELO HORIZONTE'; ACBrPixCD1.Recebedor.UF := 'MG'; PintarQRCodeEstatico('0SSSSS8641'); end; procedure TForm1.PintarQRCodeEstatico (sChave: string); var i : integer; begin ACBrPixCD1.PSP := ACBrPSPPagSeguro1; ACBrPSPPagSeguro1.ChavePIX := sChave; i:= Integer(DetectarTipoChave(sChave)); mQRE.Lines.Text := ACBrPixCD1.GerarQRCodeEstatico( StrToFloatDef('1,00', 0), '', ''); PintarQRCode(mQRE.Lines.Text,imgQRE.Bitmap, qrUTF8BOM); end; Debugando em procedure PintarQRCode(const QRCodeData: String; ABitMap: TBitmap; que chama no ACBrImage Quando dou ctrl+f7 no delphi pra inspecionar a variavel QRCodeBitmap e mando SaveToFile e gerou uma uma imagem bmp 47po47 tudo preto. debuguei aqui procedure PintarQRCode(const QRCodeData: String; ABitMap: TBitmap; const AEncoding: TQRCodeEncoding); var QRCode: TDelphiZXingQRCode; QRCodeBitmap: TBitmap; Row, Column: Integer; {$IfDef FMX} BitMapData: TBitmapData; {$EndIf} begin QRCode := TDelphiZXingQRCode.Create; QRCodeBitmap := TBitmap.Create; try QRCode.Encoding := AEncoding; QRCode.QuietZone := 1; QRCode.Data := widestring(QRCodeData); //QRCodeBitmap.SetSize(Q unit completa do FMX copia do VCL unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo, ACBrPIXCD, ACBrPIXPSPPagSeguro, ACBrBase; type TForm1 = class(TForm) imgQRE: TImage; btQREGerar: TButton; mQRE: TMemo; ACBrPSPPagSeguro1: TACBrPSPPagSeguro; ACBrPixCD1: TACBrPixCD; procedure btQREGerarClick(Sender: TObject); private procedure PintarQRCodeEstatico(sChave: string); { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} uses ACBrDelphiZXingQRCode,ACBrImage, ACBrPIXUtil; procedure TForm1.btQREGerarClick(Sender: TObject); var BitMapData: TBitmapData; begin ACBrPixCD1.Recebedor.Nome := 'JOHN KENNEDY OLIVEIRA SOUZA'; ACBrPixCD1.Recebedor.CEP := '31950280'; ACBrPixCD1.Recebedor.Cidade := 'BELO HORIZONTE'; ACBrPixCD1.Recebedor.UF := 'MG'; PintarQRCodeEstatico('07342XXXX41'); end; procedure TForm1.PintarQRCodeEstatico (sChave: string); var i : integer; begin ACBrPixCD1.PSP := ACBrPSPPagSeguro1; ACBrPSPPagSeguro1.ChavePIX := sChave; i:= Integer(DetectarTipoChave(sChave)); mQRE.Lines.Text := ACBrPixCD1.GerarQRCodeEstatico( StrToFloatDef('1,00', 0), '', ''); PintarQRCode(mQRE.Lines.Text,imgQRE.Bitmap, qrUTF8BOM); end; end. DETALHE ESTOU TESTOU O fmx no proprio windows. Editado 23 Fevereiro por johnbh3 erro Link para o comentário Compartilhar em outros sites More sharing options...
johnbh3 Postado 23 Fevereiro Autor Compartilhar Postado 23 Fevereiro Abri com android e exibi com FMX. Só não exibe quando e FMX no windows estranho Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 23 Fevereiro Moderadores Compartilhar Postado 23 Fevereiro alguma dll faltando ou atualização do windows Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
johnbh3 Postado 27 Fevereiro Autor Compartilhar Postado 27 Fevereiro Estranho, não nenhuma excepcion E qual dll por exemplo? Visto que vcl nem dll tem na pasta do exe funciona, no fmx Android idem E só pix estático n entendi o pq que seria só printar o qrCode só n exige fmx/Windows Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 4 Março Moderadores Compartilhar Postado 4 Março no caso então pode ser o suporte a imagem no fmx Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
johnbh3 Postado 14 Março Autor Compartilhar Postado 14 Março resolvido Fiz isto PintarQRCodeEstatico (); var i : integer; qrCodeData: string; begin ACBrPixCD1.Recebedor.Nome := DmDados.configuracao('NOME_PIX'); ACBrPixCD1.Recebedor.CEP := DmDados.configuracao('END_CEPPIX'); ACBrPixCD1.Recebedor.Cidade := DmDados.configuracao('END_CIDADEPIX'); ACBrPixCD1.Recebedor.UF := DmDados.configuracao('END_UFPIX'); lblNomePIX.Text := 'PAGAMENTO PARA, '+ACBrPixCD1.Recebedor.Nome; if DmDados.configuracao('TIPO_CHAVEPIX') = '1' Then begin ACBrPixBradesco.ChavePIX :='+5531'+DmDados.configuracao('CHAVE_PIX') end else begin ACBrPixBradesco.ChavePIX := DmDados.configuracao('CHAVE_PIX'); end; qrCodeData := ACBrPixCD1.GerarQRCodeEstatico( precoACobrar, 'PAGAMENTO ESTACIONAMENTO', ''); {$IFDEF MSWINDOWS} QRCodeWin(imgQR, qrCodeData); {$ELSE} QRCodeMobile(imgQR, qrCodeData); {$ENDIF} end; Usei o acbr para gerar a string do qrCode Quando mobile pela directiva procedure TfrmSaidaVeiculo.QrCodeMobile(imgQRCode: TImage; texto: string); const downsizeQuality: Integer = 2; // bigger value, better quality, slower rendering var QRCode: TDelphiZXingQRCode; Row, Column: Integer; pixelColor : TAlphaColor; vBitMapData : TBitmapData; pixelCount, y, x: Integer; columnPixel, rowPixel: Integer; function GetPixelCount(AWidth, AHeight: Single): Integer; begin if QRCode.Rows > 0 then Result := Trunc(Min(AWidth, AHeight)) div QRCode.Rows else Result := 0; end; begin // Not a good idea to stretch the QR Code... if imgQRCode.WrapMode = TImageWrapMode.Stretch then imgQRCode.WrapMode := TImageWrapMode.Fit; QRCode := TDelphiZXingQRCode.Create; try QRCode.Data := ' ' + texto; QRCode.Encoding := TQRCodeEncoding.qrAuto; QRCode.QuietZone := 4; pixelCount := GetPixelCount(imgQRCode.Width, imgQRCode.Height); case imgQRCode.WrapMode of TImageWrapMode.Original, TImageWrapMode.Tile, TImageWrapMode.Center: begin if pixelCount > 0 then imgQRCode.Bitmap.SetSize(QRCode.Columns * pixelCount, QRCode.Rows * pixelCount); end; TImageWrapMode.Fit: begin if pixelCount > 0 then begin imgQRCode.Bitmap.SetSize(QRCode.Columns * pixelCount * downsizeQuality, QRCode.Rows * pixelCount * downsizeQuality); pixelCount := pixelCount * downsizeQuality; end; end; //TImageWrapMode.iwStretch: // raise Exception.Create('Not a good idea to stretch the QR Code'); end; if imgQRCode.Bitmap.Canvas.BeginScene then begin try imgQRCode.Bitmap.Canvas.Clear(TAlphaColors.White); if pixelCount > 0 then begin if imgQRCode.Bitmap.Map(TMapAccess.Write, vBitMapData) then begin try For Row := 0 to QRCode.Rows - 1 do begin for Column := 0 to QRCode.Columns - 1 do begin if (QRCode.IsBlack[Row, Column]) then pixelColor := TAlphaColors.Black else pixelColor := TAlphaColors.White; columnPixel := Column * pixelCount; rowPixel := Row * pixelCount; for x := 0 to pixelCount - 1 do for y := 0 to pixelCount - 1 do vBitMapData.SetPixel(columnPixel + x, rowPixel + y, pixelColor); end; end; finally imgQRCode.Bitmap.Unmap(vBitMapData); end; end; end; finally imgQRCode.Bitmap.Canvas.EndScene; end; end; finally QRCode.Free; end; end; Vai que sirva pra alguem funcionou todos os bancos. E qualidade ficou otima! Agora funciona desktop e mobile. 1 Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 14 Março Moderadores Compartilhar Postado 14 Março Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Recommended Posts