Last active
December 29, 2015 04:59
-
-
Save diego-aslz/7618664 to your computer and use it in GitHub Desktop.
Impressao via Bematech MP4000 TH.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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