impressão delphi
estou desenvolvendo um sistema para lanchonete, mas estou tendo
dificuldade na impressão, estou tentando com o quikreport, mas o alinhamento está dando errado
e está saltando muito papel na hora da impressão, a impressora e bematech
esperando resposta desde
ja obrigado.
Wagner
Curtidas 0
Respostas
Carlos Bernardo
29/07/2010
Boa noite...
Eu uso write e writeln ... abaixo um exemplo
TRY
AssignFile(impressora,saidaLpt); //impressora(variavel TextFile) , saidalpt (LPT1) \\servidor\impressora
Rewrite(Impressora);
write(impressora,modoimp); // modoimp //variavel com caracteres especiais de varios modelos de impressora
tamtexto := length(cRazao); // cRazao (Nome Fantasia)
tamtexto := (iColuna - tamtexto) div 2; //iColuna (numero de colunas a serem impressas)
col := inttostr(tamtexto);
write(Impressora,Format('%'+col+'s',['']) ); //imprimi espacos em branco para centralizar
writeln(Impressora,cRazao); //imprimi o o nome fantasia centralizado.
tamtexto := length(cEndereco);
tamtexto := (iColuna - tamtexto) div 2;
col := inttostr(tamTexto);
write(Impressora,Format('%'+col+'s',['']) );
writeln(Impressora,cEndereco);
If not empty(cFone) then
begin
tamtexto := length(cFone);
tamtexto := (iColuna - tamtexto) div 2;
col := inttostr(tamTexto);
write(Impressora,Format('%'+col+'s',['']) );
writeln(Impressora,cFone);
end;
cSeparador := replicate('-',iColuna);
writeln(Impressora,cSeparador);
Finally
CloseFile(Impressora);
end; function Replicate( Caracter:String; Quant:Integer ): String;
{Repete o mesmo caractere várias vezes}
var I : Integer;
begin
Result := '';
for I := 1 to Quant do
Result := Result + Caracter;
end;
usando esse metodo, nao esqueça de criar uma impressora no gerenciador de impressoras, assim evita travamento da maquina...
AssignFile(impressora,saidaLpt); //impressora(variavel TextFile) , saidalpt (LPT1) \\servidor\impressora
Rewrite(Impressora);
write(impressora,modoimp); // modoimp //variavel com caracteres especiais de varios modelos de impressora
tamtexto := length(cRazao); // cRazao (Nome Fantasia)
tamtexto := (iColuna - tamtexto) div 2; //iColuna (numero de colunas a serem impressas)
col := inttostr(tamtexto);
write(Impressora,Format('%'+col+'s',['']) ); //imprimi espacos em branco para centralizar
writeln(Impressora,cRazao); //imprimi o o nome fantasia centralizado.
tamtexto := length(cEndereco);
tamtexto := (iColuna - tamtexto) div 2;
col := inttostr(tamTexto);
write(Impressora,Format('%'+col+'s',['']) );
writeln(Impressora,cEndereco);
If not empty(cFone) then
begin
tamtexto := length(cFone);
tamtexto := (iColuna - tamtexto) div 2;
col := inttostr(tamTexto);
write(Impressora,Format('%'+col+'s',['']) );
writeln(Impressora,cFone);
end;
cSeparador := replicate('-',iColuna);
writeln(Impressora,cSeparador);
Finally
CloseFile(Impressora);
end; function Replicate( Caracter:String; Quant:Integer ): String;
{Repete o mesmo caractere várias vezes}
var I : Integer;
begin
Result := '';
for I := 1 to Quant do
Result := Result + Caracter;
end;
usando esse metodo, nao esqueça de criar uma impressora no gerenciador de impressoras, assim evita travamento da maquina...
GOSTEI 0
Wagner
29/07/2010
blz carlos, queria saber quais são os tipo de das variaveis mostradas no codigo
impressora, modoimp e as demais.
pois esse variavel modoimp é a q eu preciso entender pois ela indica onde sera impressão
desde já obrigado.
GOSTEI 0
Carlos Bernardo
29/07/2010
Opa... Utilizo dessa maneira:
Criei constantes com os comandos das impressoras q eu trabalho, se amanha aperecer mais alguma, e so eu adicionar ela na constante e gravar no modoimp, assim nao preciso criar uma procedure para cada impressora, pois os comandos sao diferentes...
Bema = Bematech
Epson = EpsonLx 300
Lx300P = EpsonLx 300 Plus
const
cBema_ATComp = #27#77; //Ativa compactacao
cEpson_ATComp = #15;
cLX300P_ATComp = #27#80#15 ;
cBema_DSComp = #27#87; //Desativa compactacao
cEpson_DSComp = #18;
cLX300P_DSComp = #27#80#18 ;
Var impressora : TextFile; modoimp :string; If dm.sqlParams.FieldByname('ModImp').asstring = 'epsonLx' then
modoimp := cEpson_AtComp
else
If dm.sqlParams.FieldByname('ModImp').asstring = 'LxPlus' then
modoimp := cLx300P_AtComp
else
modoimp := cBema_AtComp; Espero ter colaborado...
cBema_ATComp = #27#77; //Ativa compactacao
cEpson_ATComp = #15;
cLX300P_ATComp = #27#80#15 ;
cBema_DSComp = #27#87; //Desativa compactacao
cEpson_DSComp = #18;
cLX300P_DSComp = #27#80#18 ;
Var impressora : TextFile; modoimp :string; If dm.sqlParams.FieldByname('ModImp').asstring = 'epsonLx' then
modoimp := cEpson_AtComp
else
If dm.sqlParams.FieldByname('ModImp').asstring = 'LxPlus' then
modoimp := cLx300P_AtComp
else
modoimp := cBema_AtComp; Espero ter colaborado...
GOSTEI 0
Wagner
29/07/2010
vlw pela ajuda Carlos
ajuda muito
GOSTEI 0