Skip to content

Instantly share code, notes, and snippets.

@diego-aslz
Last active December 29, 2015 04:59
Show Gist options
  • Save diego-aslz/7618664 to your computer and use it in GitHub Desktop.
Save diego-aslz/7618664 to your computer and use it in GitHub Desktop.
Impressao via Bematech MP4000 TH.
// Essa função você nao precisa, use-a só para ver como a classe é instanciada, pode instanciar direto a impressora USB.
// Esse objeto Configuracoes lê de um arquivo INI, vc pode, em vez de usar algo assim, passar a porta fixa. No caso da USB, a impressora vai procurar sozinha todas as portas COM caso a que você passou não funcione.
function ObterImpressora: TImpressora;
begin
if Configuracoes.TipoImpressora = tiSerial then
begin
Impressora.Porta := Configuracoes.Porta;
Result := Impressora;
end
else
begin
ImpressoraUSB.Porta := Configuracoes.Porta;
ImpressoraUSB.ModeloImpressora := 7;
Result := ImpressoraUSB;
end;
end;
// Idem comentario acima
function AbreImpressora(PImp: TImpressora): Boolean;
begin
PImp.Abre;
Result := PImp.Aberto;
if Result then
Configuracoes.Porta := PImp.Porta;
end;
// Aqui ta um exemplo de impressao usando aquela classe e as funcoes acima. Se faltar algo, avisa.
// Antes de executar a impressoa direto na USB, use a classe TImpressora padrão. Passe pra ela, como Porta, algo como C:\impressora.txt. Aí vc imprime e fica olhando esse arquivo.
// Quando ficar bacana, vc muda pra usar a TImpressoraUSB.
procedure TFComissoesPgto.BTOkClick(Sender: TObject);
function Telefone(tel: String): String;
begin
//Result := FormatFloat('(00) 00000000#', StrToFloat(Trim(tel)));
tel := Trim(tel);
Result := '(' + Copy(tel, 1, 2) + ') ' + Copy(tel, 3, 10);
end;
var
qtd, vlr: Real;
Imp: TImpressora;
begin
inherited;
QConsulta.First;
if not QConsulta.Eof then
begin
Imp := ObterImpressora;
if not AbreImpressora(Imp) then
begin
MessageDlg('Falha de comunicação com a Impressora.', mtError, [mbOK], 0);
Exit;
end;
Imp.Escreve('RECIBO DE COMISSAO');
Imp.EscreveLinha(AjustaStr(FormatDateTime('dd/mm/yyyy HH:MM', Now), 24, taRightJustify));
Imp.EscreveLinha('');
QTelefones.Close;
QTelefones.ParamByName('ID').AsInteger := QConsultaID_PESSOA.Value;
QTelefones.Open;
QTelefones.First;
Imp.Escreve('TELEFONE: ' + Telefone(QTelefonesTELEFONE.Text));
QTelefones.Next;
if not QTelefones.Eof then
Imp.EscreveLinha(' / ' + Telefone(QTelefonesTELEFONE.Text));
Imp.EscreveLinha('');
Imp.Escreve(' CODIGO');
Imp.Escreve(' DATAREG ');
Imp.Escreve(' QTD');
Imp.Escreve(' VALOR');
Imp.EscreveLinha(' TOTAL');
Imp.EscreveLinha(AjustaStr('', 42, taLeftJustify, '-'));
qtd := 0;
vlr := 0;
try
while not QConsulta.Eof do
begin
qtd := qtd + QConsultaQUANTIDADE.Value;
vlr := vlr + QConsultaVALOR_TOTAL.Value;
Imp.Escreve(AjustaStr(QConsultaID.Text, 7, taRightJustify));
Imp.Escreve(' ');
Imp.Escreve(AjustaStr(QConsultaDT_CADASTRO.Text, 10));
Imp.Escreve(' ');
Imp.Escreve(AjustaStr(QConsultaQUANTIDADE.Text, 4, taRightJustify));
Imp.Escreve(' ');
Imp.Escreve(AjustaStr(QConsultaVALOR.Text, 5, taRightJustify));
Imp.Escreve(' ');
Imp.EscreveLinha(AjustaStr(QConsultaVALOR_TOTAL.Text, 12, taRightJustify));
DMSistema.AtualizaBanco('COMISSOES', 'DT_PAGAMENTO', QuotedStr(FormatDateTime('DD/MM/YYYY', Date)), 'ID = ' + QConsultaID.Text);
QConsulta.Next;
end;
Imp.EscreveLinha('');
Imp.Escreve('TOTAIS:');
Imp.Escreve(AjustaStr(FormatFloat('#0.0', qtd), 16, taRightJustify));
Imp.EscreveLinha(AjustaStr(FormatFloat('#,##0.00', vlr), 19, taRightJustify));
Imp.EscreveLinha(AjustaStr('', 42, taLeftJustify, '-'));
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha(AjustaStr('__________________________________', 42, taCenter));
Imp.EscreveLinha(AjustaStr(Copy(QConsultaPESSOA.Text, 1, 34), 42, taCenter));
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('USUARIO: ' + DMAcesso.QAcessoLOGIN.Text);
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.EscreveLinha('');
Imp.Fecha;
DMSistema.TSistema.CommitRetaining;
except
DMSistema.TSistema.RollbackRetaining;
raise;
end;
Buscar;
end;
end;
// Essa função abaixo já é interessante, coloque-a no UBiblioteca. Ela ajusta o tamanho da String, alinhando no centro, na esquerda ou na direita e preenchendo o espaço que sobra com o caracter passado por argumento.
// Com ela, vc pode imprimir tipo assim:
// ---------------------RECIBO DE COMISSAO---------------------
// ou
// RECIBO DE COMISSAO 23/11/2013
// percebeu os alinhamentos?
function AjustaStr(const str: String; tamanho: Integer;
align: TAlignment; char: String): String;
var
i, l: Integer;
extra: String;
begin
Result := str;
l := Length(str);
if l >= tamanho then
Result := Copy(str, 1, tamanho)
else
begin
i := 0;
extra := '';
while i < (tamanho - l) do
begin
extra := extra + char;
Inc(i);
end;
case align of
taLeftJustify:
Result := Result + extra;
taRightJustify:
Result := extra + Result;
else
l := Floor(Length(extra) / 2);
Result := Copy(extra, 1, l) + Result + Copy(extra, 1, l);
if l * 2 < Length(extra) then
Result := char + Result;
end;
end;
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment