johnbh3
Membros-
Total de ítens
703 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que johnbh3 postou
-
AcbrPosPrint onde estou erradando para cancelar centralização de texto
johnbh3 replied to johnbh3's tópico in ACBrSerial
Deu certo aqui pessoal ignorem e </ae> mesmo -
AcbrPosPrint onde estou erradando para cancelar centralização de texto
johnbh3 replied to johnbh3's tópico in ACBrSerial
Seria </ae>? -
AcbrPosPrint onde estou erradando para cancelar centralização de texto
um tópico no fórum postou johnbh3 ACBrSerial
Pessoa Onde esta meu erro? /zera> </ce> <e>SHOPPING CIDADE</e> Rua General , 12 Bairro: centro Belo Horizonte - MG <n>Tel: (31) 3488-1234</n> </linha_simples> <n>COMPPROVANTE DE ENTRADA</n></fn> </linha_simples> PLACA: HOJ-XXXX Marca: PATIO Cor: Cinza Tipo: Horista </linha_simples> <n>Tel: R$ 10,00</n> </corte_total> Até comprovante de entrada fica como espero (Centralizado e COMPPROVANTE DE ENTRADA em negrito). Porém o resto abaixo também fica ao centro. Queria que fique a direita o resto PLACA: HOJ-XXXX Marca: PATIO Cor: Cinza Tipo: Horista </linha_simples> <n>Tel: R$ 10,00</n> </corte_total> Esta saindo assim ------------------------------------- TESTE Rua General , 12 Bairro: centro ------------------------------------- PLACA: HOJ-XXXX Marca: PATIO Cor: Cinza Tipo: Horista Queria que ficasse assim ------------------------------------- TESTE Rua General , 12 Bairro: centro ------------------------------------- PLACA: HOJ-XXXX Marca: PATIO Cor: Cinza Tipo: Horista -
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.Controls.Presentation, FMX.StdCtrls, ACBrBase, ACBrPosPrinter, System.Permissions, System.TypInfo, System.StrUtils, ACBrPosPrinterElginE1Service, ACBrPosPrinterElginE1Lib, ACBrPosPrinterTecToySunmiLib, {$IFDEF ANDROID} Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, FMX.ListBox, ACBrUtil.FilesIO, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo, System.ImageList, FMX.ImgList, FMX.Gestures, FMX.Edit, FMX.EditBox, FMX.SpinBox, FMX.Layouts, FMX.TabControl {$ENDIF} ; type TfrmImpressora = class(TForm) tabsPrincipal: TTabControl; tabConfig: TTabItem; ToolBar1: TToolBar; lblTituloConfig: TLabel; ListBox1: TListBox; ListBoxGroupHeader1: TListBoxGroupHeader; ListBoxGroupHeader5: TListBoxGroupHeader; lbiClasse: TListBoxItem; GridPanelLayout6: TGridPanelLayout; rbClasseInterna: TRadioButton; rbClasseExterna: TRadioButton; lbModelos: TListBoxItem; cbxModelo: TComboBox; cbxPagCodigo: TComboBox; Layout2: TLayout; cbControlePorta: TCheckBox; cbSmartPOS: TCheckBox; ListBoxGroupHeader2: TListBoxGroupHeader; lbImpressoras: TListBoxItem; cbxImpressorasBth: TComboBox; btnProcurarBth: TCornerButton; chbTodasBth: TCheckBox; ListBoxGroupHeader3: TListBoxGroupHeader; lbLarguraEspacejamento: TListBoxItem; GridPanelLayout1: TGridPanelLayout; Label2: TLabel; Label3: TLabel; Label7: TLabel; seColunas: TSpinBox; seEspLinhas: TSpinBox; seLinhasPular: TSpinBox; ListBoxGroupHeader4: TListBoxGroupHeader; lbCodBarras: TListBoxItem; GridPanelLayout5: TGridPanelLayout; Label1: TLabel; Label4: TLabel; cbHRI: TCheckBox; seBarrasLargura: TSpinBox; seBarrasAltura: TSpinBox; cbSuportaBMP: TCheckBox; lbBotoes: TListBoxItem; GridPanelLayout2: TGridPanelLayout; btLerConfig: TCornerButton; btSalvarConfig: TCornerButton; Layout1: TLayout; SpeedButton1: TSpeedButton; btnAtivar: TCornerButton; tabTeste: TTabItem; ToolBar2: TToolBar; lblTituloTestes: TLabel; btnBack: TSpeedButton; GridPanelLayout3: TGridPanelLayout; btnTiposLetra: TButton; btAlinhamento: TButton; btnBarras: TButton; btQRCode: TButton; btAcentos: TButton; btnLerStatus: TButton; btnLerInfo: TButton; btBeep: TButton; btnAbrirGaveta: TButton; btnCortarPapel: TButton; mImp: TMemo; GridPanelLayout4: TGridPanelLayout; btnImprimir: TCornerButton; btnLimpar: TCornerButton; StyleBook1: TStyleBook; GestureManager1: TGestureManager; ImageList1: TImageList; ACBrPosPrinter1: TACBrPosPrinter; procedure FormActivate(Sender: TObject); procedure btnProcurarBthClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnAtivarClick(Sender: TObject); procedure btnTiposLetraClick(Sender: TObject); procedure btnImprimirClick(Sender: TObject); procedure btQRCodeClick(Sender: TObject); procedure btAlinhamentoClick(Sender: TObject); procedure rbClasseInternaClick(Sender: TObject); private fE1Printer: TACBrPosPrinterElginE1Service; {$IfDef ANDROID} //fGEDIPrinter: TACBrPosPrinterGEDI; fE1Lib: TACBrPosPrinterElginE1Lib; fSunmiPrinter: TACBrPosPrinterTecToySunmiLib; {$EndIf} fsTemPermissao: Boolean; function PedirPermissoes: Boolean; function PedirPermissoes2: Boolean; procedure ConfigurarACBrPosPrinter; procedure CarregarModelosExternos; procedure CarregarModelosInternos; { Private declarations } public { Public declarations } end; var frmImpressora: TfrmImpressora; implementation {$R *.fmx} procedure TfrmImpressora.CarregarModelosExternos; begin cbxModelo.Items.Clear; cbxModelo.Items.Add('Elgin E1 Service'); cbxModelo.Items.Add('Elgin E1 Lib'); //cbxModelo.Items.Add('Gertec GEDI'); cbxModelo.Items.Add('TecToy Sunmi Service'); end; function TfrmImpressora.PedirPermissoes2: Boolean; var Ok: Boolean; LPermissions: TArray<String>; begin Ok := fsTemPermissao; if not Ok then begin if (TOSVersion.Major < 12) then begin SetLength(LPermissions, 2); LPermissions[0] := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH); LPermissions[1] := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADMIN); end else begin SetLength(LPermissions, 3); LPermissions[0] := 'android.permission.BLUETOOTH_ADVERTISE'; LPermissions[1] := 'android.permission.BLUETOOTH_CONNECT'; LPermissions[2] := 'android.permission.BLUETOOTH_SCAN'; end; mImp.Lines.Add('4'); PermissionsService.RequestPermissions(LPermissions, procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray) begin mImp.Lines.Add('5'); Ok := (Length(AGrantResults) = Length(LPermissions)); if Ok then begin for var GR in AGrantResults do begin if (GR <> TPermissionStatus.Granted) then begin Ok := False; Break; end; end; end; end, nil); end; fsTemPermissao := Ok; Result := Ok; end; procedure TfrmImpressora.CarregarModelosInternos; var m: TACBrPosPrinterModelo; begin cbxModelo.Items.Clear; For m := Low(TACBrPosPrinterModelo) to High(TACBrPosPrinterModelo) do cbxModelo.Items.Add( GetEnumName(TypeInfo(TACBrPosPrinterModelo), integer(m) ) ); end; procedure TfrmImpressora.rbClasseInternaClick(Sender: TObject); begin if rbClasseInterna.IsChecked then CarregarModelosInternos else CarregarModelosExternos; end; function TfrmImpressora.PedirPermissoes: Boolean; begin Result := ACBrPosPrinter1.Device.PedirPermissoesBlueTooth; end; procedure TfrmImpressora.ConfigurarACBrPosPrinter; begin if not PedirPermissoes then exit; if rbClasseExterna.IsChecked then begin if cbSmartPOS.IsChecked then begin fE1Printer.Modelo := TElginE1Printers.prnSmartPOS; fE1Lib.Modelo := TElginE1LibPrinters.prnSmartPOS; end else begin fE1Printer.Modelo := TElginE1Printers.prnM8; fE1Lib.Modelo := TElginE1LibPrinters.prnM8; end; case cbxModelo.ItemIndex of 0: ACBrPosPrinter1.ModeloExterno := fE1Printer; 1: ACBrPosPrinter1.ModeloExterno := fE1Lib; //2: ACBrPosPrinter1.ModeloExterno := fGEDIPrinter; else ACBrPosPrinter1.ModeloExterno := fSunmiPrinter; end; cbxImpressorasBth.ItemIndex := cbxImpressorasBth.Items.IndexOf('NULL'); end else begin if Assigned(cbxModelo.Selected) then ACBrPosPrinter1.Modelo := TACBrPosPrinterModelo(cbxModelo.ItemIndex) else ACBrPosPrinter1.Modelo := ppTexto; if Assigned(cbxImpressorasBth.Selected) then ACBrPosPrinter1.Porta := cbxImpressorasBth.Selected.Text else if cbxImpressorasBth.ItemIndex = cbxImpressorasBth.Items.IndexOf('NULL') then cbxImpressorasBth.ItemIndex := -1; end; if Assigned(cbxPagCodigo.Selected) then ACBrPosPrinter1.PaginaDeCodigo := TACBrPosPaginaCodigo(cbxPagCodigo.ItemIndex); ACBrPosPrinter1.ColunasFonteNormal := Trunc(seColunas.Value); ACBrPosPrinter1.EspacoEntreLinhas := Trunc(seEspLinhas.Value); ACBrPosPrinter1.LinhasEntreCupons := Trunc(seLinhasPular.Value); ACBrPosPrinter1.ConfigLogo.KeyCode1 := 1; ACBrPosPrinter1.ConfigLogo.KeyCode2 := 0; ACBrPosPrinter1.ControlePorta := cbControlePorta.IsChecked; end; procedure TfrmImpressora.btAlinhamentoClick(Sender: TObject); //var // BmpMono: String; // HasBMP: Boolean; begin // BmpMono := ApplicationPath+'acbrmono.bmp'; // HasBMP := cbSuportaBMP.IsChecked and FileExists(BmpMono); mImp.Lines.Add('</zera>'); mImp.Lines.Add('</linha_dupla>'); mImp.Lines.Add('TEXTO NORMAL'); mImp.Lines.Add('</ae>ALINHADO A ESQUERDA'); // if HasBMP then // mImp.Lines.Add('<bmp>'+BmpMono+'</bmp>'); mImp.Lines.Add('1 2 3 TESTANDO'); mImp.Lines.Add('<n>FONTE NEGRITO</N>'); mImp.Lines.Add('<e>FONTE EXPANDIDA</e>'); mImp.Lines.Add('<a>FONTE ALT.DUPLA</a>'); mImp.Lines.Add('<c>FONTE CONDENSADA</c>'); mImp.Lines.Add('<in>FONTE INVERTIDA'); mImp.Lines.Add('</in><S>FONTE SUBLINHADA</s>'); mImp.Lines.Add('<i>FONTE ITALICO</i>'); { mImp.Lines.Add('</fn></ce>ALINHADO NO CENTRO'); // if HasBMP then // mImp.Lines.Add('<bmp>'+BmpMono+'</bmp>'); mImp.Lines.Add('1 2 3 TESTANDO'); mImp.Lines.Add('<n>FONTE NEGRITO</N>'); mImp.Lines.Add('<e>FONTE EXPANDIDA</e>'); mImp.Lines.Add('<a>FONTE ALT.DUPLA</a>'); mImp.Lines.Add('<c>FONTE CONDENSADA</c>'); mImp.Lines.Add('<in>FONTE INVERTIDA'); mImp.Lines.Add('</in><S>FONTE SUBLINHADA</s>'); mImp.Lines.Add('<i>FONTE ITALICO</i>'); mImp.Lines.Add('</fn></ad>ALINHADO A DIREITA'); // if HasBMP then // mImp.Lines.Add('<bmp>'+BmpMono+'</bmp>'); mImp.Lines.Add('1 2 3 TESTANDO'); mImp.Lines.Add('<n>FONTE NEGRITO</N>'); mImp.Lines.Add('<e>FONTE EXPANDIDA</e>'); mImp.Lines.Add('<a>FONTE ALT.DUPLA</a>'); mImp.Lines.Add('<c>FONTE CONDENSADA</c>'); mImp.Lines.Add('<in>FONTE INVERTIDA'); mImp.Lines.Add('</in><S>FONTE SUBLINHADA</s>'); mImp.Lines.Add('<i>FONTE ITALICO</i>'); mImp.Lines.Add('</ae></fn>TEXTO NORMAL'); } mImp.Lines.Add('</corte_total>'); end; procedure TfrmImpressora.btnAtivarClick(Sender: TObject); begin ConfigurarACBrPosPrinter; ACBrPosPrinter1.Ativar; lblTituloTestes.Text := 'Testes em: '+ACBrPosPrinter1.Porta; mImp.Lines.Clear; tabsPrincipal.Next; end; procedure TfrmImpressora.btnImprimirClick(Sender: TObject); begin ACBrPosPrinter1.Buffer.Text := mImp.Lines.Text; ACBrPosPrinter1.Imprimir; // ACBrPosPrinter1.Imprimir(mImp.Lines.Text); end; procedure TfrmImpressora.btnProcurarBthClick(Sender: TObject); var sl: TStringList; begin if not PedirPermissoes then exit; cbxImpressorasBth.Items.Clear; try ACBrPosPrinter1.Device.AcharPortasBlueTooth( cbxImpressorasBth.Items, chbTodasBth.IsChecked ); cbxImpressorasBth.Items.Add('NULL'); except end; sl := TStringList.Create; try ACBrUtil.FilesIO.FindFiles('/dev/tty*', sl, True ); cbxImpressorasBth.Items.AddStrings(sl); finally sl.Free; end; end; procedure TfrmImpressora.btnTiposLetraClick(Sender: TObject); begin mImp.Lines.Clear; mImp.Lines.Add('</zera>'); mImp.Lines.Add('</linha_dupla>'); mImp.Lines.Add('FONTE NORMAL: '+IntToStr(ACBrPosPrinter1.ColunasFonteNormal)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteNormal)); mImp.Lines.Add('<e>EXPANDIDO: '+IntToStr(ACBrPosPrinter1.ColunasFonteExpandida)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteExpandida)); mImp.Lines.Add('</e><c>CONDENSADO: '+IntToStr(ACBrPosPrinter1.ColunasFonteCondensada)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteCondensada)); mImp.Lines.Add('</c><n>FONTE NEGRITO</N>'); mImp.Lines.Add('</corte_total>'); end; procedure TfrmImpressora.btQRCodeClick(Sender: TObject); begin mImp.Lines.Clear; mImp.Lines.Add('</zera>'); mImp.Lines.Add('</linha_dupla>'); mImp.Lines.Add('<qrcode_tipo>'+IntToStr(ACBrPosPrinter1.ConfigQRCode.Tipo)+'</qrcode_tipo>'); mImp.Lines.Add('<qrcode_largura>'+IntToStr(ACBrPosPrinter1.ConfigQRCode.LarguraModulo)+'</qrcode_largura>'); mImp.Lines.Add('<qrcode_error>'+IntToStr(ACBrPosPrinter1.ConfigQRCode.ErrorLevel)+'</qrcode_error>'); mImp.Lines.Add('<qrcode>http://projetoacbr.com.br</qrcode>'); mImp.Lines.Add('</ce>'); mImp.Lines.Add('<qrcode>http://www.projetoacbr.com.br/forum/index.php?/page/SAC/sobre_o_sac.html</qrcode>'); mImp.Lines.Add('</ad>'); mImp.Lines.Add('<qrcode>http://www.projetoacbr.com.br/forum/index.php?/page/SAC/questoes_importantes.html</qrcode>'); mImp.Lines.Add('</ce>'); mImp.Lines.Add('Exemplo de QRCode para NFCe'); mImp.Lines.Add('<qrcode_error>0</qrcode_error><qrcode>https://www.homologacao.nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaQRCode.aspx?'+ 'chNFe=35150805481336000137650220000000711000001960&nVersao=100&tpAmb=2&dhEmi=323031352D30382D31395432323A33333A32352D30333A3030&vNF=3.00&'+ 'vICMS=0.12&digVal=776967396F2B665861706673396878776E64594C396F61654C35493D&cIdToken=000001&cHashQRCode=9BD312D558823E1EC68CEDB338A39B6150B0480E</qrcode>'); mImp.Lines.Add('Exemplo de QRCode para SAT'); mImp.Lines.Add('<qrcode_error>0</qrcode_error><qrcode>35150811111111111111591234567890001672668828|20150820201736|118.72|05481336000137|'+ 'TCbeD81ePUpMvso4VjFqRTvs4ovqmR1ZG3bwSCumzHtW8bbMedVJjVnww103v3LxKfgckAyuizcR/9pXaKay6M4Gu8kyDef+6VH5qONIZV1cB+mFfXiaCgeZ'+ 'ALuRDCH1PRyb6hoBeRUkUk6lOdXSczRW9Y83GJMXdOFroEbzFmpf4+WOhe2BZ3mEdXKKGMfl1EB0JWnAThkGT+1Er9Jh/3En5YI4hgQP3NC2BiJVJ6oCEbKb'+ '85s5915DSZAw4qB/MlESWViDsDVYEnS/FQgA2kP2A9pR4+agdHmgWiz30MJYqX5Ng9XEYvvOMzl1Y6+7/frzsocOxfuQyFsnfJzogw==</qrcode>'); mImp.Lines.Add('</corte_total>'); end; procedure TfrmImpressora.FormActivate(Sender: TObject); var PermissionBLUETOOTH : String; begin if not PedirPermissoes2() then begin mImp.Lines.Add('Sem permissão onActive'); end; ShowMessage('Versão 1.1'); end; procedure TfrmImpressora.FormCreate(Sender: TObject); var p: TACBrPosPaginaCodigo; begin cbxPagCodigo.Items.Clear ; For p := Low(TACBrPosPaginaCodigo) to High(TACBrPosPaginaCodigo) do cbxPagCodigo.Items.Add( GetEnumName(TypeInfo(TACBrPosPaginaCodigo), integer(p) ) ) ; end; end. Eu fiz uma copia do demo! Em virtude do demo estar dando erro de compilar no alexandria. Mas tudo que tinha lá, veio pra ca.
-
Eu to com um modelo aqui em mImp.Lines.Add('</c><n>FONTE NEGRITO</N>'); Teoricamente imprimiria negrito. Porém não imprime, mas a impressora tem opção negrito a página de teste funciona. Comprei dessas Mini Impressora Portatil Bluetooth Termica 58mm Tentie com pc850 e pc852 TUDO ISTO IMPRIMIU COM FONTE SIMPLES mImp.Lines.Clear; mImp.Lines.Add('</zera>'); mImp.Lines.Add('</linha_dupla>'); mImp.Lines.Add('FONTE NORMAL: '+IntToStr(ACBrPosPrinter1.ColunasFonteNormal)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteNormal)); mImp.Lines.Add('<e>EXPANDIDO: '+IntToStr(ACBrPosPrinter1.ColunasFonteExpandida)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteExpandida)); mImp.Lines.Add('</e><c>CONDENSADO: '+IntToStr(ACBrPosPrinter1.ColunasFonteCondensada)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteCondensada)); mImp.Lines.Add('</c><n>FONTE NEGRITO</N>'); mImp.Lines.Add('</corte_total>');
-
Pessoal no demo do ACBrPosPrinter Para imprimir no teste mImp.Lines.Clear; mImp.Lines.Add('</zera>'); mImp.Lines.Add('</linha_dupla>'); mImp.Lines.Add('FONTE NORMAL: '+IntToStr(ACBrPosPrinter1.ColunasFonteNormal)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteNormal)); mImp.Lines.Add('<e>EXPANDIDO: '+IntToStr(ACBrPosPrinter1.ColunasFonteExpandida)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteExpandida)); mImp.Lines.Add('</e><c>CONDENSADO: '+IntToStr(ACBrPosPrinter1.ColunasFonteCondensada)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteCondensada)); mImp.Lines.Add('</c><n>FONTE NEGRITO</N>'); mImp.Lines.Add('</corte_total>'); Eu queria imprimir algo assim -------------------------------------------- RECIBO -------------------------------------------- ID : 41 *Negrito* ENTRADA : 08/02/2020-19:18:05 SAIDA : 08/02/2020-19:18:29 Cliente : JOAO TESTE -------------------------------------------- VOLTE SEMPRE -------------------------------------------- Consegue me formular um exemplo de como eu alimentaria o mesmo assim?
-
Claro eu marquei além das duas permissões na IDE de BLUETOOTH e marquei também dangerous (rum time use aproval) adverse, connet e scan. O Acbr já faz isto em LPermissions[0] := 'android.permission.BLUETOOTH_ADVERTISE'; LPermissions[1] := 'android.permission.BLUETOOTH_CONNECT'; LPermissions[2] := 'android.permission.BLUETOOTH_SCAN'; Por algum motivo da erro. Eu marquei tamném da IDE. E passei o ACBrPosPrinter1.Device.PedirPermissoesBlueTooth para onAcative do form. Eu refiz o demo, só com que precisava. 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.Controls.Presentation, FMX.StdCtrls, ACBrBase, ACBrPosPrinter, System.Permissions, System.TypInfo, System.StrUtils, {$IFDEF ANDROID} Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, FMX.ListBox, ACBrUtil.FilesIO, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo, System.ImageList, FMX.ImgList, FMX.Gestures, FMX.Edit, FMX.EditBox, FMX.SpinBox, FMX.Layouts, FMX.TabControl {$ENDIF} ; type TfrmImpressora = class(TForm) tabsPrincipal: TTabControl; tabConfig: TTabItem; ToolBar1: TToolBar; lblTituloConfig: TLabel; ListBox1: TListBox; ListBoxGroupHeader1: TListBoxGroupHeader; ListBoxGroupHeader5: TListBoxGroupHeader; lbiClasse: TListBoxItem; GridPanelLayout6: TGridPanelLayout; rbClasseInterna: TRadioButton; rbClasseExterna: TRadioButton; lbModelos: TListBoxItem; cbxModelo: TComboBox; cbxPagCodigo: TComboBox; Layout2: TLayout; cbControlePorta: TCheckBox; cbSmartPOS: TCheckBox; ListBoxGroupHeader2: TListBoxGroupHeader; lbImpressoras: TListBoxItem; cbxImpressorasBth: TComboBox; btnProcurarBth: TCornerButton; chbTodasBth: TCheckBox; ListBoxGroupHeader3: TListBoxGroupHeader; lbLarguraEspacejamento: TListBoxItem; GridPanelLayout1: TGridPanelLayout; Label2: TLabel; Label3: TLabel; Label7: TLabel; seColunas: TSpinBox; seEspLinhas: TSpinBox; seLinhasPular: TSpinBox; ListBoxGroupHeader4: TListBoxGroupHeader; lbCodBarras: TListBoxItem; GridPanelLayout5: TGridPanelLayout; Label1: TLabel; Label4: TLabel; cbHRI: TCheckBox; seBarrasLargura: TSpinBox; seBarrasAltura: TSpinBox; cbSuportaBMP: TCheckBox; lbBotoes: TListBoxItem; GridPanelLayout2: TGridPanelLayout; btLerConfig: TCornerButton; btSalvarConfig: TCornerButton; Layout1: TLayout; SpeedButton1: TSpeedButton; btnAtivar: TCornerButton; tabTeste: TTabItem; ToolBar2: TToolBar; lblTituloTestes: TLabel; btnBack: TSpeedButton; GridPanelLayout3: TGridPanelLayout; btnTiposLetra: TButton; btAlinhamento: TButton; btnBarras: TButton; btQRCode: TButton; btAcentos: TButton; btnLerStatus: TButton; btnLerInfo: TButton; btBeep: TButton; btnAbrirGaveta: TButton; btnCortarPapel: TButton; mImp: TMemo; GridPanelLayout4: TGridPanelLayout; btnImprimir: TCornerButton; btnLimpar: TCornerButton; StyleBook1: TStyleBook; GestureManager1: TGestureManager; ImageList1: TImageList; ACBrPosPrinter1: TACBrPosPrinter; procedure FormActivate(Sender: TObject); procedure btnProcurarBthClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnAtivarClick(Sender: TObject); procedure btnTiposLetraClick(Sender: TObject); procedure btnImprimirClick(Sender: TObject); private fsTemPermissao: Boolean; function PedirPermissoes: Boolean; function PedirPermissoes2: Boolean; procedure ConfigurarACBrPosPrinter; { Private declarations } public { Public declarations } end; var frmImpressora: TfrmImpressora; implementation {$R *.fmx} function TfrmImpressora.PedirPermissoes2: Boolean; var Ok: Boolean; LPermissions: TArray<String>; begin Ok := fsTemPermissao; if not Ok then begin if (TOSVersion.Major < 12) then begin SetLength(LPermissions, 2); LPermissions[0] := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH); LPermissions[1] := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADMIN); end else begin SetLength(LPermissions, 3); LPermissions[0] := 'android.permission.BLUETOOTH_ADVERTISE'; LPermissions[1] := 'android.permission.BLUETOOTH_CONNECT'; LPermissions[2] := 'android.permission.BLUETOOTH_SCAN'; end; mImp.Lines.Add('4'); PermissionsService.RequestPermissions(LPermissions, procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray) begin mImp.Lines.Add('5'); Ok := (Length(AGrantResults) = Length(LPermissions)); if Ok then begin for var GR in AGrantResults do begin if (GR <> TPermissionStatus.Granted) then begin Ok := False; Break; end; end; end; end, nil); end; fsTemPermissao := Ok; Result := Ok; end; function TfrmImpressora.PedirPermissoes: Boolean; begin Result := ACBrPosPrinter1.Device.PedirPermissoesBlueTooth; end; procedure TfrmImpressora.ConfigurarACBrPosPrinter; begin if not PedirPermissoes then exit; if rbClasseExterna.IsChecked then begin {if cbSmartPOS.IsChecked then begin fE1Printer.Modelo := TElginE1Printers.prnSmartPOS; fE1Lib.Modelo := TElginE1LibPrinters.prnSmartPOS; end else begin fE1Printer.Modelo := TElginE1Printers.prnM8; fE1Lib.Modelo := TElginE1LibPrinters.prnM8; end; case cbxModelo.ItemIndex of 0: ACBrPosPrinter1.ModeloExterno := fE1Printer; 1: ACBrPosPrinter1.ModeloExterno := fE1Lib; //2: ACBrPosPrinter1.ModeloExterno := fGEDIPrinter; else ACBrPosPrinter1.ModeloExterno := fSunmiPrinter; end; } cbxImpressorasBth.ItemIndex := cbxImpressorasBth.Items.IndexOf('NULL'); end else begin if Assigned(cbxModelo.Selected) then ACBrPosPrinter1.Modelo := TACBrPosPrinterModelo(cbxModelo.ItemIndex) else ACBrPosPrinter1.Modelo := ppTexto; if Assigned(cbxImpressorasBth.Selected) then ACBrPosPrinter1.Porta := cbxImpressorasBth.Selected.Text else if cbxImpressorasBth.ItemIndex = cbxImpressorasBth.Items.IndexOf('NULL') then cbxImpressorasBth.ItemIndex := -1; end; if Assigned(cbxPagCodigo.Selected) then ACBrPosPrinter1.PaginaDeCodigo := TACBrPosPaginaCodigo(cbxPagCodigo.ItemIndex); ACBrPosPrinter1.ColunasFonteNormal := Trunc(seColunas.Value); ACBrPosPrinter1.EspacoEntreLinhas := Trunc(seEspLinhas.Value); ACBrPosPrinter1.LinhasEntreCupons := Trunc(seLinhasPular.Value); ACBrPosPrinter1.ConfigLogo.KeyCode1 := 1; ACBrPosPrinter1.ConfigLogo.KeyCode2 := 0; ACBrPosPrinter1.ControlePorta := cbControlePorta.IsChecked; end; procedure TfrmImpressora.btnAtivarClick(Sender: TObject); begin ConfigurarACBrPosPrinter; ACBrPosPrinter1.Ativar; lblTituloTestes.Text := 'Testes em: '+ACBrPosPrinter1.Porta; mImp.Lines.Clear; tabsPrincipal.Next; end; procedure TfrmImpressora.btnImprimirClick(Sender: TObject); begin ACBrPosPrinter1.Buffer.Text := mImp.Lines.Text; ACBrPosPrinter1.Imprimir; // ACBrPosPrinter1.Imprimir(mImp.Lines.Text); end; procedure TfrmImpressora.btnProcurarBthClick(Sender: TObject); var sl: TStringList; begin if not PedirPermissoes then exit; cbxImpressorasBth.Items.Clear; try ACBrPosPrinter1.Device.AcharPortasBlueTooth( cbxImpressorasBth.Items, chbTodasBth.IsChecked ); cbxImpressorasBth.Items.Add('NULL'); except end; sl := TStringList.Create; try ACBrUtil.FilesIO.FindFiles('/dev/tty*', sl, True ); cbxImpressorasBth.Items.AddStrings(sl); finally sl.Free; end; end; procedure TfrmImpressora.btnTiposLetraClick(Sender: TObject); begin mImp.Lines.Clear; mImp.Lines.Add('</zera>'); mImp.Lines.Add('</linha_dupla>'); mImp.Lines.Add('FONTE NORMAL: '+IntToStr(ACBrPosPrinter1.ColunasFonteNormal)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteNormal)); mImp.Lines.Add('<e>EXPANDIDO: '+IntToStr(ACBrPosPrinter1.ColunasFonteExpandida)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteExpandida)); mImp.Lines.Add('</e><c>CONDENSADO: '+IntToStr(ACBrPosPrinter1.ColunasFonteCondensada)+' Colunas'); mImp.Lines.Add(LeftStr('....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8', ACBrPosPrinter1.ColunasFonteCondensada)); mImp.Lines.Add('</c><n>FONTE NEGRITO</N>'); mImp.Lines.Add('</corte_total>'); end; procedure TfrmImpressora.FormActivate(Sender: TObject); var PermissionBLUETOOTH : String; begin if not PedirPermissoes2() then begin mImp.Lines.Add('Sem permissão onActive'); end; ShowMessage('Versão 1.1'); end; procedure TfrmImpressora.FormCreate(Sender: TObject); var p: TACBrPosPaginaCodigo; begin cbxPagCodigo.Items.Clear ; For p := Low(TACBrPosPaginaCodigo) to High(TACBrPosPaginaCodigo) do cbxPagCodigo.Items.Add( GetEnumName(TypeInfo(TACBrPosPaginaCodigo), integer(p) ) ) ; end; end.
-
Resolvido aqui senhores!
-
Ola Pessoal eu já tentei de tudo que vcs imanagem com Delphi alexandria. 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.Controls.Presentation, FMX.StdCtrls, ACBrBase, ACBrPosPrinter, System.Permissions, {$IFDEF ANDROID} Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, FMX.ListBox, ACBrUtil.FilesIO, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo {$ENDIF} ; type TfrmImpressora = class(TForm) Label1: TLabel; ACBrPosPrinter1: TACBrPosPrinter; cbxImpressorasBth: TComboBox; btnBuscarDispositivos: TButton; chbTodasBth: TCheckBox; Memo1: TMemo; procedure FormActivate(Sender: TObject); procedure btnBuscarDispositivosClick(Sender: TObject); private function PedirPermissoes: Boolean; { Private declarations } public { Public declarations } end; var frmImpressora: TfrmImpressora; implementation {$R *.fmx} function TfrmImpressora.PedirPermissoes: Boolean; begin Result := ACBrPosPrinter1.Device.PedirPermissoesBlueTooth; end; procedure TfrmImpressora.btnBuscarDispositivosClick(Sender: TObject); var sl: TStringList; begin Memo1.Lines.Clear; Memo1.Lines.Add('Iniciando...'); if not PedirPermissoes then begin Memo1.Lines.Add('Sem permissão : not PedirPermissoes'); exit; end else begin Memo1.Lines.Add('OK permissão : PedirPermissoes'); end; cbxImpressorasBth.Items.Clear; try Memo1.Lines.Add('Iniciando...[AcharPortasBlueTooth]'); ACBrPosPrinter1.Device.AcharPortasBlueTooth( cbxImpressorasBth.Items, chbTodasBth.IsChecked ); cbxImpressorasBth.Items.Add('NULL'); Memo1.Lines.Add('Finalzando...[FIM]'); except on E:Exception do Memo1.Lines.Add('AcharPortasBlueTooth...[ERRO] '+E.Message); end; Memo1.Lines.Add('Iniciando...[FilesIO]'); sl := TStringList.Create; try ACBrUtil.FilesIO.FindFiles('/dev/tty*', sl, True ); cbxImpressorasBth.Items.AddStrings(sl); finally Memo1.Lines.Add('Iniciando...[FilesIO]'); sl.Free; end; end; procedure TfrmImpressora.FormActivate(Sender: TObject); var PermissionBLUETOOTH : String; begin PedirPermissoes(); Label1.Text := '1.5'; PermissionBLUETOOTH := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH); PermissionsService.RequestPermissions([PermissionBLUETOOTH], (nil)); PermissionBLUETOOTH := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADMIN); PermissionsService.RequestPermissions([PermissionBLUETOOTH], (nil)) end; end. No OnActive eu coloquei PermissionBLUETOOTH := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH); PermissionsService.RequestPermissions([PermissionBLUETOOTH], (nil)); PermissionBLUETOOTH := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADMIN); PermissionsService.RequestPermissions([PermissionBLUETOOTH], (nil)) Mas era só teste ta. Na teoria o ACBR na parte de pedirPermissão faria isto. NA IDEI em todos ambientes de desenvolvimento marquei as duas opções de .BLUETOOTH. Testei também desmarcado. Fora do ACBR tentei tb este tutorial porém eu sei que e muito antigo https://github.com/adrianosantostreina/impressora-bluetooth Da erro external. Tudo que tento da errado. Nem o demo do Acbr da certo. Mesmo porque no meu exemplo iria fazer aos poucos. O codigo compartilhado acima e justamente do ACBR, e consiste incialmente somente em jogar os dispositivos no COMBO. Eu estou a 2 dias com isso e tudo que tenho não funciona. Ah no codigo acima eu coloquei um memo pra saber se deu certo permissão então aconteceu em if not PedirPermissoes then e que passa em function TACBrDeviceBlueTooth.PedirPermissoes: Boolean; tem directiva de {$IfDef DELPHI28_UP} normal ne? n e isso problema, na teoria isto era pra simplesmente funcionar e não funciona.
-
Ocorre que neste caso não posso instalar o Acbr! rs
-
Ola Pessoal Eu tava precisando so do ACBrBAL, isto não seria possivel de forma simples ne. Pq ele acaba dependendo de outras units. Alguém já teve necessidade deste tipo?
-
Entrei no demo Quando vou compilar, quase na etapa final de gerar o APK da erro. [PAClient Error] Error: E7688 Unable to execute '"C:\Program Files\Java\jdk1.8.0_60\bin\java.exe" -cp "c:\program files (x86)\embarcadero\studio\22.0\bin\Android\r8-3.3.28.jar" com.android.tools.r8.D8 --release --min-api 23 --output "C:\Delphi\ACbr\Exemplos\ACBrSerial\ACBrPosPrinter\Android\Android64\Release\ACBrPosPrinterAndroid.classes" @"C:\Delphi\ACbr\Exemplos\ACBrSerial\ACBrPosPrinter\Android\Android64\Release\dex_list.txt"' (Error 1) [PAClient Error] Error: E7688 Error in c:\program files (x86)\embarcadero\studio\22.0\lib\android\Release\android-support-v4.dex.jar: [PAClient Error] Error: E7688 java.nio.file.NoSuchFileException: c:\program files (x86)\embarcadero\studio\22.0\lib\android\Release\android-support-v4.dex.jar [PAClient Error] Error: E7688 Error in c:\program files (x86)\embarcadero\studio\22.0\lib\android\Release\com-google-android-gms.play-services-ads-base.17.2.0.dex.jar: [PAClient Error] Error: E7688 java.nio.file.NoSuchFileException: c:\program files (x86)\embarcadero\studio\22.0\lib\android\Release\com-google-android-gms.play-services-ads-base.17.2.0.dex.jar Se eu crio aplicativo novo não da o erro. Certamente porque o demo foi feito em outro SDK algo assim ne. Sabem o que preciso ajusar?
-
Então mas eu penso em fazer back mesmo. Mas a parte de pagamento posso chamar do próprio equipamento ? Este equipamento é frágil? "Ligeiramente fragil" nunca vi ele em lugar algum em em.lojas de bh
-
Então. Este elgin aprova o documento ? E só curiosidade mesmo. Eu também penso assim que é melhor ter o back próprio e usar o acbr pra assinar e aprovar e ele devolve pro aplicativo a resposta apenas. Só fico na dúvida sobre o pagamento se não seria um requisito obrigatório aprovar pela própria elgin pra pra pagamento Ou se posso aprovar pelo back a nfce e chamo a rotina de pagamento passado o XML transmitido.
-
Olá E bem usado este pdv mini 10 da elgin Android? Eu fiquei na dúvida. Eu preciso ter um back certo? Pra gravar no banco as informação? Ou é recomendável gravad em sqlite local? Ele aceitaria requisição rest ? Como tem.sido a aplicação de informação com este pdv da elgin pela comunidade? Outra coisa sobre aprovar o documento fiscal assinatura etc. Eu que preciso no back fazer ? Ou eu gero com acbr o XML e elgin que envia os documentos fiscais(minha dúvida de isto seria obrigatório ) me preocupa caso surja atualização ou erro e não ter como saber. Achei o produto bem legal só não sei o quanto ele é usado e se vale a pena é esta parte técnica de aprovação do nfce e guardar os dados. Mas sobre gravar os dados nem é maior dos problemas ou dúvida Mas é mais questão de aprovação da nfce. Como nunca mechi com Android e nfce se for tudo no próprio Android e usar acbr pra gerar o XML evidentemente preciso assinar o arquivo com certificado a1 que vai ficar no Android? Não sei se estou viajando nesta parte ou se coloco o a1 no dispositivo e quem trata de assinar é autorizar e elgin (que seria estranho). Não sendo elgin. Back não me parece alternativa ruim embora eu obrigue o usuário ter pdv Android e outro Windows pra ser servidor, ou uso acbr pra assinar e aprovar direito no Android (nem sei se isto é possível devido às dll de assinar XML) seria outras formas no Android certo se isso ? Ao mesmo tempo ter um back e Android mini10 falar com back e se houver processo de homologação junto a elgin seria estranho e custoso pra eles.
-
Olá E bem usado este pdv mini 10 da elgin Android? Eu fiquei na dúvida. Eu preciso ter um back certo? Pra gravar no banco as informação? Ou é recomendável gravad em sqlite local? Ele aceitaria requisição rest ? Como tem.sido a aplicação de informação com este pdv da elgin pela comunidade? Outra coisa sobre aprovar o documento fiscal assinatura etc. Eu que preciso no back fazer ? Ou eu gero com acbr o XML e elgin que envia os documentos fiscais(minha dúvida de isto seria obrigatório ) me preocupa caso surja atualização ou erro e não ter como saber. Achei o produto bem legal só não sei o quanto ele é usado e se vale a pena é esta parte técnica de aprovação do nfce e guardar os dados.
-
Olá Pessoal boa noite, com fmx e possível ter aplicativo em maquenta do pagSeguro, ciclo, rede, Stone Elas em si tudo é android. Mas normalmente pra se aprovar o pagamento precisa falar com sdk da maquineta. Existe como isso delphi fmx? Ou outro equipamento pos, onde no final de venda ele realizad pagamento ali via débito, crédito enfim isto é bem comum hoje em dia. Conhecem case disso ? Se sim algum githut ? At John
-
OU no caso nem usar uma smartPos uma webAPI em android com FMX que faz a requisição Eu vi que o acbr tem uma ideia do que imagino com sitef e paygo, mas como sou micro dev tentar passar mensalidade de tef pra meu cliente eu já to fora
-
Ola Pessoal me desculpe e que não entenda nada deste nicho. Exemplo tenho um software de estacionamento no primeiro momento não quero emitir o cupom e sim processar o pagamento. O cupom vou deixar a API emitir. Mas queria imprimir o comprovante falando com pagamento como se fosse um SDK. Isto existe. Como se fosse um WebTef porém com mercadoPago, pagseguro por exemplo. Sei que tem o sitef e paygo. Mas elas são caras quando o cliente e tão pequeno. Estou completamente em duvida.
-
Se eu tentar com TPNGIMage Gerei uma no paint tb iVBORw0KGgoAAAANSUhEUgAAAFwAAAAjCAYAAAAZm21MAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAABrSURBVGhD7dCxDcAwAMMwp///3GboDZxEwPCus+29C/L8H6TgWMGxgmMFxwqOFRwrOFZwrOBYwbGCYwXHCo4VHCs4VnCs4FjBsYJjBccKjhUcKzhWcKzgWMGxgmMFxwqOFRwrOFZwrODU9gFYFAFFtI13jAAAAABJRU5ErkJggg== da erro tambem. da The file being readed is not a valid "Portable Network Graphics" image because it contains an invalid header. This file may be corruped, try obtaining it again. O erro ocorre em Result.LoadFromStream(Output);
-
Se eu tentar com TPNGIMage da The file being readed is not a valid "Portable Network Graphics" image because it contains an invalid header. This file may be corruped, try obtaining it again. O erro ocorre em Result.LoadFromStream(Output);
-
data:image/png;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNTgyIiB3aWR0aD0iNTgyIiBjbGFzcz0icHlxcmNvZGUiPjxwYXRoIHRyYW5zZm9ybT0ic2NhbGUoNikiIHN0cm9rZT0iIzAwMCIgY2xhc3M9InB5cXJsaW5lIiBkPSJNNCA0LjVoN20xIDBoMW0yIDBoNG0yIDBoMW0zIDBoMm00IDBoMW01IDBoM20xIDBoMW00IDBoMW0zIDBoMW0xIDBoMm0xIDBoMW0yIDBoMm0xIDBoNG0yIDBoMW01IDBoMm0xIDBoMW0xIDBoMm0yIDBoM20xIDBoN20tODkgMWgxbTUgMGgxbTEgMGgxbTEgMGgxbTIgMGgxbTEgMGgxbTEgMGg1bTMgMGgxbTEgMGg0bTEgMGgxbTEgMGgxbTEgMGgxbTMgMGgzbTEgMGgzbTEgMGg0bTEgMGgxbTIgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTYgMGgzbTEgMGgxbTEgMGgzbTEgMGgxbTIgMGgxbTUgMGgxbS04OSAxaDFtMSAwaDNtMSAwaDFtMSAwaDNtMiAwaDFtMSAwaDJtMSAwaDltMSAwaDFtMiAwaDFtMiAwaDJtMyAwaDJtNiAwaDNtMiAwaDNtMSAwaDFtMiAwaDFtNCAwaDFtMSAwaDFtMSAwaDJtMSAwaDRtMiAwaDFtNCAwaDFtMSAwaDNtMSAwaDFtLTg5IDFoMW0xIDBoM20xIDBoMW0yIDBoM20xIDBoMW0zIDBoNW0xIDBoN20yIDBoMTBtMSAwaDFtMiAwaDFtMiAwaDFtMSAwaDFtMSAwaDFtMSAwaDNtMiAwaDFtMiAwaDJtNCAwaDJtMiAwaDRtMSAwaDFtMSAwaDFtMSAwaDFtMSAwaDNtMSAwaDFtLTg5IDFoMW0xIDBoM20xIDBoMW0yIDBoM20yIDBoMW0yIDBoNG0yIDBoMW0yIDBoMW0xIDBoMTBtMiAwaDFtNCAwaDFtMSAwaDFtMyAwaDFtMiAwaDVtMyAwaDNtMiAwaDFtMSAwaDJtMyAwaDJtMyAwaDFtMiAwaDFtMSAwaDNtMSAwaDFtLTg5IDFoMW01IDBoMW0xIDBoN20xIDBoMW00IDBoMW0xIDBoNm0zIDBoNW0zIDBoMm0yIDBoMW0xIDBoMW0xIDBoMW0xIDBoMW0zIDBoMW0zIDBoMW0yIDBoMW0yIDBoM20xIDBoMW0xIDBoMm0xIDBoNW0xIDBoMW0yIDBoMW01IDBoMW0tODkgMWg3bTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGg3bS04MSAxaDFtMSAwaDNtMSAwaDFtNCAwaDFtMiAwaDJtMyAwaDJtMyAwaDFtOCAwaDJtMSAwaDJtMSAwaDFtMSAwaDJtMyAwaDFtMyAwaDhtMiAwaDFtNSAwaDFtNSAwaDFtLTc5IDFoM20xIDBoMW0xIDBoMW0yIDBoMW0xIDBoM20xIDBoMW0xIDBoNG0xIDBoMm0xIDBoNm01IDBoMW0xIDBoMW0yIDBoMm0zIDBoM20xIDBoMW0xIDBoNW00IDBoMm0xIDBoMW01IDBoMW0xIDBoMm0xIDBoM20xIDBoM20yIDBoM20tODggMWgybTIgMGgxbTIgMGgxbTMgMGg0bTMgMGg0bTEgMGg1bTEgMGgxbTEgMGgybTIgMGgzbTEgMGgxbTIgMGgxbTMgMGgybTQgMGgxbTIgMGgybTEgMGgybTIgMGgxbTMgMGgxbTEgMGgxbTIgMGgxbTMgMGgxbTMgMGgxbTcgMGgxbS04OSAxaDJtMiAwaDZtMyAwaDJtMiAwaDFtMyAwaDFtMSAwaDFtMyAwaDFtMyAwaDJtMSAwaDJtMSAwaDRtMyAwaDJtMSAwaDFtMSAwaDVtMiAwaDFtNCAwaDFtNSAwaDVtMiAwaDZtMSAwaDFtMiAwaDRtLTc3IDFoMW0xIDBoMW0zIDBoMW0zIDBoMW0xIDBoMW0xIDBoM20xIDBoM20xIDBoMW0xIDBoMW0zIDBoMW03IDBoMW0yIDBoMW0xIDBoNG0xIDBoM20yIDBoMTJtOCAwaDNtLTg1IDFoMW00IDBoMm0xIDBoMW0yIDBoM20xIDBoNW0xIDBoMW02IDBoMW0xIDBoMW0zIDBoMW0xIDBoNG0zIDBoMm0xIDBoMW0zIDBoMW01IDBoMm0yIDBoMm0xIDBoMW01IDBoMm0zIDBoMm0yIDBoMW0xIDBoMW0xIDBoNm0tODggMWgxbTMgMGgybTEgMGg0bTEgMGgxbTEgMGgxbTQgMGg3bTEgMGgybTEgMGgxbTIgMGgxbTUgMGgxbTEgMGgxbTEgMGgxbTIgMGgybTEgMGgybTIgMGgzbTEgMGgzbTQgMGgxbTIgMGg0bTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTMgMGgxbTUgMGgxbS04OSAxaDVtMSAwaDNtMSAwaDFtMSAwaDNtNCAwaDhtMiAwaDFtMSAwaDJtMSAwaDNtMiAwaDFtMSAwaDNtMSAwaDdtMiAwaDJtMSAwaDFtMiAwaDRtNCAwaDFtMSAwaDJtMSAwaDNtMSAwaDJtMSAwaDFtMiAwaDNtMSAwaDFtLTg2IDFoMm0zIDBoMW00IDBoMW0yIDBoMW0xIDBoMW0xIDBoMW01IDBoMW0yIDBoMW0yIDBoNG0yIDBoMm0xIDBoMm0yIDBoMW0xIDBoMm01IDBoMm0zIDBoMm0zIDBoMm0xIDBoMW0xIDBoMW0yIDBoM20yIDBoMW0xIDBoMW0xIDBoMm0xIDBoMm0yIDBoMm0tODcgMWgzbTEgMGgxbTEgMGgxbTEgMGgybTEgMGgxbTIgMGgybTEgMGg3bTQgMGgxbTIgMGgybTEgMGgzbTMgMGgxbTEgMGgybTEgMGg0bTEgMGgzbTIgMGgybTEgMGgxbTIgMGgybTMgMGgybTUgMGgzbTEgMGgxbTEgMGgxbTEgMGg0bS04MyAxaDFtNCAwaDJtMSAwaDFtMiAwaDFtMiAwaDFtMiAwaDNtMiAwaDVtMiAwaDZtMSAwaDJtMSAwaDFtMiAwaDFtMyAwaDZtMSAwaDFtNSAwaDFtNSAwaDJtMyAwaDFtNiAwaDRtMiAwaDJtLTg5IDFoM20zIDBoMW0yIDBoM20yIDBoMm0xIDBoMW0xIDBoMW0xIDBoMW0yIDBoMW01IDBoMW0zIDBoMm0xIDBoMm0xIDBoMW0xIDBoMW0xIDBoM20yIDBoMm0xIDBoM20zIDBoMW0yIDBoMW0xIDBoM20yIDBoM20zIDBoM200IDBoMW0xIDBoM20tODYgMWgzbTEgMGgybTEgMGgxbTEgMGgxbTIgMGgxbTEgMGgybTEgMGgybTIgMGgybTEgMGgybTEgMGgybTEgMGgxbTUgMGgxbTMgMGgxbTEgMGgxbTEgMGgzbTEgMGg2bTMgMGgxbTEgMGgxbTIgMGgxbTEgMGgxbTEgMGgybTEgMGgxbTEgMGgybTMgMGgxbTIgMGgybTEgMGg0bTEgMGgxbS04OCAxaDNtMSAwaDZtMiAwaDRtMSAwaDFtMiAwaDFtMSAwaDFtNCAwaDJtMiAwaDFtNCAwaDNtNSAwaDJtNCAwaDJtMyAwaDNtMyAwaDVtMyAwaDJtNCAwaDJtMSAwaDRtMyAwaDJtLTg3IDFoMW0xIDBoM20zIDBoNG0xIDBoNW0yIDBoMW0xIDBoMW0zIDBoMW0yIDBoM20xIDBoM20xIDBoMW0zIDBoMW0zIDBoM20yIDBoOG0yIDBoMW0yIDBoMW0yIDBoMm0xIDBoMW00IDBoM200IDBoM20xIDBoNG0tODcgMWgxbTMgMGgzbTIgMGgxbTEgMGgybTEgMGgxbTMgMGg1bTEgMGgxbTIgMGgxbTIgMGgxbTEgMGg0bTEgMGgxbTEgMGgxbTIgMGgxbTEgMGgxbTIgMGgybTEgMGgxbTMgMGgybTMgMGg2bTMgMGgybTIgMGg0bTEgMGgxbTMgMGgxbTEgMGgybS04NyAxaDNtMSAwaDFtNSAwaDNtMSAwaDFtMSAwaDFtMSAwaDJtMyAwaDFtMiAwaDJtMSAwaDFtMSAwaDJtMiAwaDRtMiAwaDVtMSAwaDFtMSAwaDFtMSAwaDRtMSAwaDFtMTEgMGg3bTEgMGgxbTMgMGgzbTEgMGgybTEgMGgybS04OCAxaDFtMiAwaDFtMSAwaDRtMSAwaDFtMiAwaDJtMiAwaDFtNyAwaDFtNCAwaDNtMiAwaDFtMiAwaDFtMSAwaDJtMSAwaDFtMSAwaDFtMyAwaDFtMSAwaDNtMSAwaDJtNSAwaDNtMiAwaDJtMiAwaDFtMiAwaDJtMiAwaDJtMiAwaDFtMiAwaDFtLTg3IDFoMW00IDBoMW0xIDBoMW0yIDBoMW0xIDBoMm01IDBoM20xIDBoN20xIDBoMm0xIDBoMm0xIDBoMm0zIDBoM20xIDBoMm0yIDBoMW0yIDBoMm0yIDBoMm0zIDBoM20xIDBoNW0zIDBoM20xIDBoMW0xIDBoM20yIDBoMm0xIDBoMW0tODkgMWgxbTEgMGgybTEgMGgzbTIgMGgzbTIgMGgybTIgMGgxbTEgMGgybTEgMGgxbTIgMGgybTEgMGgxbTEgMGgzbTMgMGgybTEgMGg0bTEgMGgxbTIgMGgxbTIgMGgxbTQgMGgxbTUgMGgxbTEgMGgybTEgMGgxbTEgMGgxbTIgMGgxbTEgMGgxbTUgMGgxbTEgMGgxbTEgMGgzbS04OCAxaDRtMyAwaDFtMSAwaDNtMiAwaDRtMiAwaDFtMSAwaDFtMyAwaDFtMiAwaDJtNCAwaDJtMyAwaDJtMSAwaDFtNCAwaDJtMSAwaDFtMSAwaDNtNiAwaDFtMSAwaDFtMiAwaDFtMSAwaDFtMSAwaDFtMSAwaDJtMSAwaDFtMSAwaDFtMSAwaDFtMSAwaDFtMSAwaDJtMiAwaDFtLTg5IDFoMm0xIDBoN200IDBoM20xIDBoMW0xIDBoMTVtMSAwaDFtMSAwaDVtMSAwaDFtMSAwaDRtMiAwaDdtMSAwaDRtMiAwaDFtMSAwaDFtMSAwaDFtMyAwaDNtMiAwaDhtMSAwaDFtLTg5IDFoMm0yIDBoMW0zIDBoMW0zIDBoMm0xIDBoM20zIDBoMW0xIDBoMW0xIDBoNG0zIDBoMW0xIDBoMW02IDBoMW0yIDBoM20yIDBoM20xIDBoMm0zIDBoMm0yIDBoMW0xIDBoMW0xIDBoMm0xIDBoMW0xIDBoMW0yIDBoM20xIDBoM20zIDBoMW0yIDBoMW0tODggMWgzbTEgMGgxbTEgMGgxbTEgMGgxbTMgMGgxbTQgMGgybTEgMGgxbTEgMGgybTMgMGgybTEgMGgxbTEgMGgxbTIgMGgzbTEgMGgzbTIgMGgxbTIgMGgxbTQgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTIgMGgxbTEgMGgzbTUgMGgybTEgMGgxbTEgMGgzbTEgMGgxbTEgMGgxbTEgMGgybS04NCAxaDFtMSAwaDFtMyAwaDFtMSAwaDNtMyAwaDRtMSAwaDFtMSAwaDFtMSAwaDFtMSAwaDJtMyAwaDFtMSAwaDRtMyAwaDFtMSAwaDRtMSAwaDJtMiAwaDNtMyAwaDRtNCAwaDFtMSAwaDRtNCAwaDFtMiAwaDJtMyAwaDJtLTg1IDFoMW0xIDBoN20yIDBoMW0xIDBoNG0zIDBoMm0xIDBoMm0yIDBoNW0xIDBoMW01IDBoMW01IDBoNm0xIDBoNm0xIDBoNW0xIDBoMW0yIDBoMm0xIDBoNG0xIDBoMW0xIDBoMTBtLTg5IDFoMW0yIDBoMW01IDBoMW0xIDBoMW0xMSAwaDFtMiAwaDJtMiAwaDJtMiAwaDFtMSAwaDRtMiAwaDFtMSAwaDFtMSAwaDFtMiAwaDFtMSAwaDFtMSAwaDFtMyAwaDJtNSAwaDFtMiAwaDNtNCAwaDJtMTEgMGgxbS04NyAxaDNtMSAwaDNtMyAwaDdtMiAwaDFtMyAwaDJtMyAwaDNtMSAwaDFtMiAwaDFtMyAwaDJtMSAwaDJtMiAwaDFtMSAwaDFtMyAwaDJtNCAwaDFtMSAwaDNtMiAwaDFtMSAwaDFtMSAwaDFtMSAwaDJtMSAwaDJtMiAwaDRtMSAwaDNtLTg3IDFoMW0xIDBoNG0yIDBoMW03IDBoM20yIDBoMW0yIDBoMW0xIDBoMW03IDBoMW0yIDBoMm0xIDBoMm0xIDBoMW0xIDBoMW0yIDBoMW0yIDBoMW0xIDBoMW0yIDBoMW0yIDBoMm02IDBoM20xIDBoMW0yIDBoMW0yIDBoM20xIDBoMW0xIDBoMW0zIDBoMm0tODggMWgybTEgMGgxbTEgMGg2bTEgMGgxbTUgMGgybTIgMGgybTIgMGgxbTEgMGgybTQgMGgxbTIgMGgybTIgMGgybTIgMGgxbTIgMGgybTEgMGgybTIgMGgybTMgMGg1bTIgMGgybTIgMGgxbTIgMGgxbTEgMGgxbTQgMGgxbTEgMGgzbS04NyAxaDFtMiAwaDFtMSAwaDFtMSAwaDFtMiAwaDFtMSAwaDFtMSAwaDJtMSAwaDFtMiAwaDJtMSAwaDFtMyAwaDFtMiAwaDFtMSAwaDFtMSAwaDNtMyAwaDFtMiAwaDJtMyAwaDNtMyAwaDJtMSAwaDFtMiAwaDFtMSAwaDJtNCAwaDRtMiAwaDFtNCAwaDFtMSAwaDFtMiAwaDJtMSAwaDFtLTg2IDFoMW0zIDBoMW0yIDBoNm0xIDBoMm0xIDBoM20yIDBoMm0xIDBoNG0xIDBoMW00IDBoMW0xIDBoNW0zIDBoM20yIDBoNG0xIDBoMm0xIDBoNG0xIDBoMW01IDBoN20xIDBoM20yIDBoMW0tODMgMWgxbTEgMGgybTEgMGgxbTEgMGgybTEgMGgxbTEgMGgxbTQgMGgxbTIgMGg0bTIgMGgzbTEgMGgybTEgMGgxbTEgMGgzbTEgMGgxbTIgMGgzbTEgMGgxbTIgMGgxbTMgMGgybTIgMGgxbTMgMGgybTIgMGg2bTQgMGgxbTMgMGgxbTEgMGgxbTMgMGgybS04NyAxaDFtMyAwaDRtMiAwaDJtMSAwaDFtMSAwaDFtMSAwaDFtMiAwaDFtMiAwaDFtMSAwaDVtMyAwaDFtMyAwaDFtMSAwaDFtMSAwaDJtMSAwaDFtMSAwaDRtMSAwaDFtMiAwaDNtMSAwaDFtMSAwaDNtMyAwaDFtMyAwaDRtNiAwaDVtLTg2IDFoMW0xIDBoMW0xIDBoMW0zIDBoMW0xIDBoMm0xIDBoMW0xIDBoMW0yIDBoM20xIDBoMW0xIDBoM20yIDBoM20xIDBoMW0xIDBoNW0zIDBoMW0xIDBoMm0yIDBoMm00IDBoMW01IDBoMm01IDBoMW0xIDBoMm0yIDBoMW00IDBoNG0xIDBoMW0yIDBoMW0tODcgMWgxbTIgMGgybTQgMGgxbTUgMGgxbTEgMGg0bTIgMGgybTMgMGgzbTEgMGgxbTIgMGgxbTEgMGg3bTkgMGg0bTIgMGgzbTEgMGgxbTMgMGgxbTEgMGgxbTEgMGgxbTEgMGg0bTEgMGgybTIgMGgxbTEgMGgybS04OCAxaDFtMiAwaDJtMiAwaDFtMyAwaDNtNyAwaDFtMSAwaDNtMSAwaDNtMSAwaDNtMSAwaDJtMSAwaDFtMSAwaDJtMSAwaDFtMiAwaDVtMSAwaDNtMiAwaDFtMSAwaDJtMSAwaDFtMSAwaDJtMSAwaDJtMiAwaDJtMSAwaDFtNCAwaDFtNSAwaDFtMSAwaDFtLTg4IDFoMW0yIDBoMm0xIDBoMm0zIDBoMW0yIDBoMm00IDBoNW0yIDBoMW0zIDBoMW0yIDBoM20xIDBoMm0yIDBoM201IDBoMW0zIDBoNW0xIDBoMm0xIDBoMW0xIDBoMW0yIDBoMW0xIDBoMW0xIDBoNW0xIDBoMm0yIDBoMW0xIDBoMW0xIDBoM20tODkgMWgxbTEgMGgxbTEgMGgybTEgMGgxbTEgMGgzbTEgMGgxbTMgMGgxbTMgMGgybTEgMGgybTEgMGgxbTIgMGgybTIgMGg0bTEgMGgxbTEgMGgxbTEgMGgxbTMgMGgybTIgMGgybTIgMGgzbTYgMGgxbTEgMGg2bTExIDBoMm0yIDBoMW0tODUgMWg5bTEgMGgxbTEgMGgxbTQgMGgxbTUgMGgybTEgMGgybTEgMGgxbTIgMGgxbTIgMGgzbTQgMGgybTEgMGgxbTQgMGgybTIgMGgxbTQgMGgybTEgMGgxbTIgMGgxbTQgMGgxbTEgMGgxbTEgMGg0bTMgMGgxbTEgMGgxbS04NCAxaDNtMSAwaDFtMSAwaDNtNCAwaDNtMiAwaDFtMiAwaDFtMyAwaDFtMSAwaDFtMSAwaDFtMSAwaDFtMSAwaDJtMSAwaDJtNCAwaDJtNCAwaDNtMyAwaDFtMSAwaDNtMiAwaDFtMSAwaDRtMSAwaDJtMSAwaDFtMSAwaDJtLTc4IDFoM20yIDBoMm00IDBoMW0xIDBoMm0zIDBoMW0xIDBoMW0xIDBoMW01IDBoMm0yIDBoNW0yIDBoMW0xIDBoMW0zIDBoM20xIDBoMW0xIDBoMm0xIDBoMW0xIDBoMW0zIDBoMW0xIDBoNW0xIDBoMm0yIDBoMW0xIDBoM20xIDBoMW0xIDBoMW0xIDBoMW0xIDBoM20xIDBoMW0tODkgMWgybTEgMGgxbTYgMGgxbTUgMGgxbTUgMGg1bTEgMGg4bTEgMGg0bTQgMGg0bTIgMGgxbTEgMGgxbTEgMGgxbTMgMGgybTEgMGgybTIgMGg1bTMgMGgybTMgMGgxbTIgMGgxbTIgMGgxbTEgMGgybS04NiAxaDFtMSAwaDRtNCAwaDJtMSAwaDFtMiAwaDFtNCAwaDFtMTIgMGgzbTEgMGg0bTYgMGgzbTIgMGgxbTUgMGgybTEgMGgxbTEgMGgxbTIgMGgxbTIgMGg2bTEgMGgxbTEgMGgzbS04NSAxaDFtNiAwaDJtMSAwaDFtMSAwaDJtMyAwaDFtMiAwaDJtMSAwaDFtMiAwaDZtMiAwaDFtMSAwaDJtMSAwaDJtMiAwaDFtMiAwaDVtMSAwaDRtMSAwaDFtMSAwaDJtNyAwaDFtMiAwaDJtNiAwaDFtMyAwaDFtMyAwaDJtLTg5IDFoM20xIDBoMW0xIDBoM20yIDBoMm0xIDBoMW0xIDBoMW0xIDBoM20yIDBoMW03IDBoMW0xIDBoMW0xIDBoNG0xIDBoM20yIDBoMW0zIDBoMW0xIDBoMm00IDBoMW00IDBoMm0yIDBoMm0xIDBoMm0xIDBoMm0xIDBoM20xIDBoMW0yIDBoNW0tODcgMWgxbTEgMGgybTMgMGgxbTEgMGgzbTEgMGgybTIgMGgzbTEgMGgxbTUgMGgzbTEgMGgxbTEgMGgxbTIgMGgxbTEgMGg0bTEgMGgxbTMgMGgxbTIgMGgxbTIgMGgxbTEgMGgxbTEgMGgybTEgMGgxbTEgMGgxbTQgMGg0bTEgMGgxbTEgMGgybTIgMGgybTMgMGgxbTIgMGgxbTEgMGgxbS04OCAxaDFtMiAwaDVtMiAwaDFtNCAwaDNtMiAwaDNtMSAwaDJtMSAwaDZtMSAwaDNtMiAwaDJtMSAwaDJtMSAwaDFtMSAwaDNtMiAwaDZtMSAwaDFtMSAwaDNtMiAwaDJtMSAwaDRtMSAwaDFtMSAwaDhtMSAwaDJtLTg4IDFoMW0xIDBoM20zIDBoMW0xIDBoMW0xIDBoMm00IDBoMm03IDBoMm0zIDBoMW0xIDBoM20zIDBoNG0xIDBoM20yIDBoM20xIDBoMW0zIDBoMW0yIDBoMW0yIDBoMW0xIDBoMm0xIDBoMW0xIDBoMW0yIDBoM20yIDBoMm0zIDBoMm0tODYgMWgybTEgMGgybTEgMGgxbTEgMGgzbTEgMGgzbTEgMGgybTEgMGgxbTIgMGgxbTMgMGgxbTEgMGgxbTEgMGgxbTEgMGg1bTEgMGgybTIgMGg0bTQgMGgybTIgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTIgMGgzbTIgMGgxbTYgMGgybTMgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbS04OCAxaDJtMSAwaDFtMyAwaDNtMiAwaDFtMSAwaDNtNSAwaDRtMSAwaDFtMyAwaDFtMSAwaDJtMiAwaDJtMiAwaDFtMiAwaDFtMSAwaDFtNSAwaDJtMyAwaDJtMiAwaDFtMSAwaDFtMSAwaDFtMSAwaDVtMSAwaDFtMSAwaDFtMyAwaDFtMyAwaDFtMiAwaDJtLTg5IDFoOW0xIDBoMm0xIDBoMm00IDBoMW0xIDBoMW0xIDBoMW0xIDBoMm0xIDBoNW0yIDBoMW0yIDBoNG0xIDBoMW0yIDBoMW0yIDBoMW0xIDBoOG0xIDBoNG00IDBoMW0xIDBoMW0xIDBoN20xIDBoNW0xIDBoMm0tODYgMWgxbTEgMGgybTQgMGgzbTIgMGgzbTEgMGgxbTIgMGgxbTEgMGgxbTEgMGgxbTEgMGgzbTEgMGgxbTEgMGgybTEgMGgxbTEgMGgybTEgMGgybTEgMGgybTEgMGgzbTEgMGgxbTMgMGg2bTEgMGgybTEgMGgybTIgMGgybTQgMGgxbTIgMGgxbTQgMGgybS04NiAxaDJtMyAwaDNtMSAwaDJtMSAwaDFtNSAwaDFtMyAwaDNtMSAwaDFtMiAwaDJtNiAwaDFtMSAwaDFtMSAwaDFtMSAwaDFtMiAwaDJtMSAwaDJtMSAwaDFtMiAwaDNtNyAwaDJtMiAwaDJtMSAwaDJtMSAwaDFtNyAwaDFtLTg0IDFoMW0xIDBoMm0xIDBoMW0yIDBoMW00IDBoMW00IDBoMW0xIDBoMW0xIDBoNG0xIDBoMW0xIDBoMW0xIDBoMW0zIDBoMm0zIDBoMW0zIDBoMW0xIDBoM20xIDBoMW0zIDBoMW01IDBoMW0zIDBoMW0xIDBoMm0xIDBoNG0xIDBoMW0xIDBoMW0xIDBoM20xIDBoNW0xIDBoMW0tODkgMWgybTEgMGg0bTIgMGgybTEgMGg2bTEgMGgybTEgMGgxbTEgMGgybTEgMGgybTEgMGgybTEgMGgxbTEgMGgxbTIgMGgxbTIgMGgxbTQgMGgybTEgMGgybTMgMGgxbTMgMGgybTEgMGgybTIgMGgybTEgMGgxbTQgMGgybTEgMGgybTMgMGgxbTEgMGgxbTIgMGgybS04NyAxaDVtMiAwaDJtMSAwaDJtMSAwaDFtMiAwaDJtMSAwaDFtMiAwaDJtNCAwaDZtNCAwaDJtMSAwaDJtMyAwaDNtNSAwaDJtMSAwaDJtNCAwaDFtMiAwaDFtMSAwaDZtNSAwaDJtMiAwaDJtMSAwaDJtLTg4IDFoM20xIDBoNG0xIDBoMW0xIDBoMm0xIDBoMW0xIDBoMW0yIDBoMW0xIDBoMW0yIDBoMm0yIDBoMm0xIDBoMW0yIDBoMW0zIDBoMW0xIDBoM20xIDBoMW0yIDBoMm0xIDBoNW0xIDBoMW0zIDBoMW0xIDBoMm0zIDBoM200IDBoMW00IDBoMW00IDBoMW0tODYgMWg0bTEgMGgxbTEgMGgxbTEgMGgxbTIgMGgybTEgMGgxbTIgMGgzbTEgMGg3bTEgMGgzbTEgMGgzbTEgMGg2bTUgMGgybTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgxbTQgMGgxbTQgMGgybTEgMGgybTEgMGgybTIgMGgzbTEgMGgxbTEgMGgybTEgMGgxbS04MyAxaDJtMyAwaDFtMiAwaDNtMiAwaDFtMyAwaDFtMyAwaDJtMSAwaDFtMSAwaDFtMSAwaDNtMSAwaDFtMSAwaDNtMiAwaDFtMiAwaDFtMSAwaDJtMiAwaDFtMiAwaDNtMSAwaDJtMSAwaDRtNiAwaDFtMSAwaDNtNCAwaDNtMSAwaDFtLTg2IDFoMm0xIDBoMW0yIDBoMW0xIDBoMm0xIDBoMm0xIDBoMW00IDBoMW0yIDBoMm0yIDBoMW0xIDBoMW0xIDBoMW0yIDBoMm0zIDBoMW0xIDBoNG0yIDBoMW0yIDBoMm0xIDBoMW0xIDBoMm00IDBoMm0yIDBoN20xIDBoMW0yIDBoMW0xIDBoMW00IDBoMW00IDBoMW0tODkgMWgybTEgMGgxbTEgMGgzbTIgMGgxbTQgMGgzbTYgMGgxbTEgMGgybTEgMGgybTIgMGgybTMgMGgxbTEgMGgybTEgMGgybTMgMGg0bTEgMGgxbTEgMGgxbTIgMGg2bTEgMGgxbTIgMGgzbTEgMGg1bTMgMGgybTMgMGgzbS04NCAxaDFtMyAwaDNtMyAwaDFtMSAwaDJtMSAwaDFtMSAwaDFtMSAwaDJtMiAwaDFtMSAwaDFtMSAwaDNtNCAwaDFtMSAwaDFtMyAwaDFtNSAwaDFtMSAwaDNtMSAwaDJtMSAwaDFtMyAwaDFtMyAwaDFtMSAwaDJtMSAwaDFtMSAwaDNtMyAwaDFtMSAwaDdtLTg2IDFoMW0yIDBoMm0xIDBoMW0zIDBoMm0xIDBoMW0xIDBoOG0xIDBoMm0xIDBoMm00IDBoMm0xIDBoMW0yIDBoM20zIDBoMm0zIDBoMm0xIDBoMW0xIDBoMm0xIDBoMm0xIDBoMm03IDBoM20xIDBoMW00IDBoNG0tODYgMWgzbTUgMGgybTIgMGgzbTIgMGgxbTEgMGgzbTEgMGgxbTEgMGgxbTEgMGgxbTIgMGgybTUgMGgxbTEgMGgzbTIgMGg3bTIgMGgxbTIgMGgybTEgMGgzbTQgMGgxbTEgMGgzbTQgMGgybTEgMGgxbTEgMGgxbTIgMGgzbTEgMGgybS04OCAxaDRtMSAwaDJtMSAwaDFtMyAwaDNtMiAwaDFtMyAwaDJtMSAwaDFtNCAwaDFtMSAwaDNtMiAwaDFtMSAwaDZtMiAwaDNtMSAwaDZtMyAwaDFtMiAwaDNtMiAwaDNtNCAwaDFtMSAwaDFtMiAwaDJtMyAwaDJtMSAwaDFtLTgwIDFoMW0xIDBoMm0xIDBoMW0yIDBoNG0yIDBoMW0yIDBoMW0yIDBoMW0xIDBoMm0xIDBoMW0xIDBoMW0zIDBoMW0yIDBoMW0xIDBoMW00IDBoMW0xIDBoM20xIDBoMW02IDBoMm0xIDBoNW0xIDBoMW0xIDBoMW0zIDBoMW0xIDBoMW0xIDBoM20tODIgMWgxbTIgMGgxbTUgMGgzbTEgMGgxbTIgMGg2bTEgMGg4bTEgMGgybTEgMGgxbTEgMGgxbTEgMGgxbTIgMGgybTIgMGgxbTEgMGgybTEgMGg0bTQgMGg0bTcgMGgxbTIgMGgybTMgMGgxbTIgMGgxbS04NSAxaDNtMSAwaDFtMiAwaDJtMSAwaDFtMyAwaDRtMSAwaDFtMSAwaDJtMSAwaDJtMSAwaDFtMyAwaDFtMSAwaDNtMSAwaDFtNCAwaDJtMSAwaDJtMSAwaDJtMiAwaDJtMSAwaDFtMiAwaDVtMyAwaDNtMSAwaDJtMyAwaDRtMiAwaDFtMiAwaDJtMSAwaDJtLTg5IDFoMW0xIDBoMm0xIDBoMm0xIDBoMW0xIDBoMW0xIDBoMm0xIDBoMm0xIDBoMm0yIDBoMW0xIDBoM20zIDBoMW0xIDBoMm0xIDBoNG0zIDBoMm01IDBoMm00IDBoMm0zIDBoMm0xIDBoMm0xIDBoMW0zIDBoMW00IDBoMW0xIDBoMW0yIDBoMW0yIDBoMW0zIDBoMW0tODggMWgxbTMgMGgybTIgMGgxbTEgMGgzbTQgMGgxbTEgMGgybTIgMGgzbTEgMGgxbTEgMGgxbTMgMGgxbTYgMGgxbTEgMGgxbTEgMGgxbTMgMGgxbTEgMGgxbTIgMGg1bTIgMGgxbTIgMGgybTIgMGg0bTQgMGgxbTQgMGgzbTEgMGgxbTIgMGgybS04OSAxaDFtMiAwaDFtMiAwaDFtMSAwaDFtMSAwaDJtNSAwaDFtMiAwaDFtMiAwaDJtMSAwaDFtMiAwaDFtMyAwaDFtNiAwaDFtMSAwaDJtMiAwaDFtMSAwaDNtMSAwaDFtNCAwaDNtMiAwaDJtMSAwaDNtMyAwaDNtMSAwaDFtMSAwaDFtMyAwaDFtMSAwaDNtLTg2IDFoMm0yIDBoMm0zIDBoMW0yIDBoMW0yIDBoMm0yIDBoNG0xIDBoM20xIDBoMW0xIDBoMW0xIDBoM20xIDBoMW0xIDBoMW04IDBoM200IDBoMW0yIDBoMW0xIDBoM20xIDBoMm0zIDBoM20zIDBoMW0xIDBoMW0xIDBoMW0xIDBoNm0yIDBoMW0tODkgMWgxbTIgMGgxbTIgMGgzbTMgMGgxbTMgMGgxbTEgMGgxbTEgMGgxbTIgMGgybTEgMGgxbTEgMGg1bTEgMGgxbTEgMGgxbTEgMGgxbTEgMGgybTIgMGgxbTIgMGgxbTUgMGg2bTEgMGgybTEgMGgxbTQgMGgybTIgMGgxbTIgMGgxbTEgMGgybTEgMGg4bS04MCAxaDFtMSAwaDJtMSAwaDFtMSAwaDZtMiAwaDFtMiAwaDFtMSAwaDFtMyAwaDJtMiAwaDFtMiAwaDVtMyAwaDFtMSAwaDJtMSAwaDFtMSAwaDFtMyAwaDJtMyAwaDJtMiAwaDFtMSAwaDRtMSAwaDFtMSAwaDFtMSAwaDFtMSAwaDFtMyAwaDFtMyAwaDFtLTg5IDFoN20yIDBoMW0yIDBoMm0yIDBoMW0yIDBoMW0yIDBoMW0yIDBoMm0xIDBoMW0xIDBoMW0xIDBoMW0xIDBoMm0yIDBoMW0yIDBoMW0xIDBoNG0xIDBoMm0xIDBoNG0xIDBoMW0xIDBoMW0xIDBoMW0xIDBoM20yIDBoMm0yIDBoMW0xIDBoMW0xIDBoNG0xIDBoMW0xIDBoMW0xIDBoMW0xIDBoMW0tODcgMWgxbTUgMGgxbTUgMGgzbTIgMGgybTEgMGgybTMgMGgybTEgMGgxbTMgMGgybTEgMGgxbTUgMGgxbTIgMGgxbTIgMGgxbTYgMGgxbTMgMGgybTEgMGgxbTIgMGgybTEgMGgxbTMgMGgxbTIgMGgxbTQgMGgybTMgMGgxbTIgMGgybS04OSAxaDFtMSAwaDNtMSAwaDFtMSAwaDNtMSAwaDJtMSAwaDFtMiAwaDFtMyAwaDNtMyAwaDZtMSAwaDFtMSAwaDJtNyAwaDFtMiAwaDFtMSAwaDhtMiAwaDVtMiAwaDNtMiAwaDFtMSAwaDNtMiAwaDdtMSAwaDFtLTg5IDFoMW0xIDBoM20xIDBoMW0xIDBoMW0yIDBoMW0xIDBoMW0zIDBoMW01IDBoMW0yIDBoMW0xIDBoMm0yIDBoMW01IDBoNm00IDBoMm01IDBoMW0xIDBoMW0yIDBoMW0yIDBoMW0yIDBoMW0yIDBoMm00IDBoMW0yIDBoMm0xIDBoMW01IDBoMW0tODggMWgxbTEgMGgzbTEgMGgxbTEgMGgxbTEgMGgxbTMgMGgzbTEgMGgxbTEgMGgxbTUgMGgxbTEgMGgzbTEgMGg1bTIgMGgxbTUgMGgybTIgMGgxbTEgMGgybTIgMGgxbTEgMGgybTEgMGgxbTEgMGgybTEgMGgxbTIgMGgxbTEgMGgxbTIgMGgxbTEgMGgybTIgMGgxbTIgMGg0bTEgMGgxbS04OCAxaDFtNSAwaDFtMyAwaDFtMiAwaDFtMSAwaDFtMiAwaDJtMSAwaDJtMiAwaDFtMiAwaDFtNSAwaDFtOCAwaDNtMSAwaDJtMiAwaDFtMSAwaDJtMiAwaDVtMSAwaDRtMSAwaDFtMSAwaDNtMSAwaDFtMiAwaDRtMiAwaDJtMiAwaDFtLTg4IDFoN200IDBoMm0yIDBoMm0xIDBoM20zIDBoMW0yIDBoM20yIDBoM20zIDBoMm0zIDBoMm01IDBoMW0zIDBoMW0yIDBoMW00IDBoM20xIDBoMW0xIDBoM20xIDBoMm0xIDBoMm01IDBoMW0xIDBoMyIvPjwvc3ZnPgo= Estou com esta imagem porem da erro na conversão em delphi. function Base64ToImage(const base64String: string): TBitmap; var Input: TStringStream; Output: TBytesStream; begin Result := TBitmap.Create; if Length(base64String) = 0 then Exit; Input := TStringStream.Create(base64String); Output := TBytesStream.Create; try Input.Position := 0; TNetEncoding.Base64.Decode(Input, Output); Output.Position := 0; Result.LoadFromStream(Output); finally Input.Free; Output.Free; end; end; Queria jogar ele no TRLImage do fortes. Ou seila em um TIMage mas ambos da erro Da erro Bitmapt is not valid mas ja alterei para PNGIMage e nada Estou usando o dephi xe7
-
Agora vou deitar pq briguei demais com isto hj kkk function HttpPostGetJSON(const URL: string; var JSON: String;const TimeOut: integer = 5000): Boolean; const CRLF : UTF8String = #13#10; var HTTP : THTTPSend; Data : TStringStream; begin HTTP := THTTPSend.Create; Data := TStringStream.Create(UTF8Encode(JSON), TEncoding.UTF8); JSON := ''; HTTP.Timeout := TimeOut; try HTTP.Headers.Add('Content-Type: application/json') ; HTTP.Headers.Add('x-api-key: ?????????????????????????????????????????') ; HTTP.MimeType := 'application/json'; Data.Position := 0; HTTP.Document.CopyFrom( Data, 0); Data.Size := 0; Result := HTTP.HTTPMethod('POST', URL); if Result then begin if HTTP.Document.Size > 0 then begin Data.LoadFromStream( HTTP.Document ); JSON := Data.DataString + CRLF + 'Result=' + HTTP.ResultString + CRLF+ 'Protocol='+HTTP.Protocol ; end; end else begin ShowMessage(HTTP.ResultCode.ToString) end; finally HTTP.Free; Data.Free; end; end; Da o mesmo 500 como retorno.