Imprimir direto na impressora Nao consigo...

Delphi

20/08/2008

Boa noite amigos do DevMedia
é o seguinte:
Já tentei de tudo por aqui, e nao consigo um exemplo simples de Imprimir direto na Impressora.
Será que alguem pode me mandar um código de meia duzia de linhas para começo? vai ser de grande valia pra dar os primeiros passos.
teria que ser com dados de uma TABLE, ou seja vou imprimir todos os clientes da tabela
CodCli na posicao 10, NomeCli na posiçao 15 , e DatCadastro na posiçao 50
Nao se preocupem com salto de pagina ou fim de arquivo, só quero ver a impressora imprimindo.
Quanto ´a visualizaçao do relatorio, fica pra outra oportunidade, mas de repente eu aprendo isso.

Obnrigado a todos
Jotas


[b:a6da3a8f92][/b:a6da3a8f92]


Jotas

Jotas

Curtidas 0

Respostas

Diegotiemann

Diegotiemann

20/08/2008

Sem montar relatório não sei como fazer.
A solução mais simples a adotar, é criar um relatório no QuickReport e em vez de chamar SEuForm.seuQuickREp.preview, chame SEuForm.seuQuickREp.Print;


GOSTEI 0
Julianomv

Julianomv

20/08/2008

Uma saida um pouco mesmo sofisticada é vc escrever um arquivo TXT (com Write mesmo e depois criar uma arquivinho .BAT (sou da antiga rsrsr) e chamar este arquivo atraves do comando WinExec(´c:\nomear.bat´,SW_SHOW);

no BAT so tem a linha assim
type nomearq_q_escreveu.txt > prn


GOSTEI 0
Paulo

Paulo

20/08/2008

var
Arq:TextFile;
begin
//Estas duas linhas são para configurar a Font, Tamanho e se é negrito ou não
Printer.canvas.font.name := ´Draft 10cpi´;
Printer.canvas.font.style := [];
//AssignPrn - Abre sempre a impressora padrão
//AssignFile - Você terá que informar a porta de impressão(´LPT1´)
AssignPrn(Arq);
Rewrite(Arq);
while not eof(Arq) do
begin
Writeln(Arq
end;
end;
Te mando algumas funções para usar, para alinhar e etc....
function RelRepStr(sStr: string; nVezes: integer): string; var s: string; i: integer; begin s := ´´; for i := 1 to nVezes do s := s + sStr; RelRepStr := s; end;

Esta função acima ajuda a você a repetir um determinado caracter
Seu uso é:Writeln(Arq,RelRepStr(´-´,80)); Repete numa folha de 80 colunas o hifem.
function AnsiToAscii(str : string) : string; var i : Integer; begin for i := 1 to length(str) do case str[i] of ´á´ : str[i] := ´a´; ´é´ : str[i] := ´e´; ´í´ : str[i] := ´i´; ´ó´ : str[i] := ´o´; ´ú´ : str[i] := ´u´; ´à´ : str[i] := ´a´; ´è´ : str[i] := ´e´; ´ì´ : str[i] := ´i´; ´ò´ : str[i] := ´o´; ´ù´ : str[i] := ´u´; ´â´ : str[i] := ´a´; ´ê´ : str[i] := ´e´; ´î´ : str[i] := ´i´; ´ô´ : str[i] := ´o´; ´û´ : str[i] := ´u´; ´ä´ : str[i] := ´a´; ´ë´ : str[i] := ´e´; ´ï´ : str[i] := ´i´; ´ö´ : str[i] := ´o´; ´ü´ : str[i] := ´u´; ´ã´ : str[i] := ´a´; ´õ´ : str[i] := ´o´; ´ñ´ : str[i] := ´n´; ´ç´ : str[i] := ´c´; ´Á´ : str[i] := ´A´; ´É´ : str[i] := ´E´; ´Í´ : str[i] := ´I´; ´Ó´ : str[i] := ´O´; ´Ú´ : str[i] := ´U´; ´À´ : str[i] := ´A´; ´È´ : str[i] := ´E´; ´Ì´ : str[i] := ´I´; ´Ò´ : str[i] := ´O´; ´Ù´ : str[i] := ´U´; ´Â´ : str[i] := ´A´; ´Ê´ : str[i] := ´E´; ´Î´ : str[i] := ´I´; ´Ô´ : str[i] := ´O´; ´Û´ : str[i] := ´U´; ´Ä´ : str[i] := ´A´; ´Ë´ : str[i] := ´E´; ´Ï´ : str[i] := ´I´; ´Ö´ : str[i] := ´O´; ´Ü´ : str[i] := ´U´; ´Ã´ : str[i] := ´A´; ´Õ´ : str[i] := ´O´; ´Ñ´ : str[i] := ´N´; ´Ç´ : str[i] := ´C´; ´º´ : str[i] := ´.´; end; Result := Str; end;

Esta função evita os caracteres estranhos para a impressora LX300 ou similar, pois ela não reconhece ~,ç,´,´,^ da lingua portuguesa
Seu uso é:AnsiToAscii(String);
function AjustaNum(str : string; tam: integer) : string; begin while length( str ) < tam do str := ´ ´ + str; if length(str) > tam then str := copy(str, 1, tam); result := str; end;

Ajusta valores numericos à direita, como é o padrão. Seu uso é:
Writeln(Arq,AjustaNum(String,9)) >> O Nove é o tamanho do campo numerico.
function AjustaStr( str : string; tam: integer) : string; begin while length( str ) < tam do str := str + ´ ´; if length(str) > tam then str := copy(str, 1, tam); result := str; end;

Função para alinhar String à direita como é o padrão. Seu uso é:
Writeln(Arq,AjustaStr(String,35)) >> 35 é o tamanho do campo String.

Espero que te ajude e a mais alguem isso que te passei. Claro que há outras formas de alinhr e etc... Só depende de quem vai escrever os códigos.


GOSTEI 0
Brunodsr

Brunodsr

20/08/2008

Mto bom Paulo.. Tuas funcoes vao me ajudar tb. Eu ia implementar isso dai na mao, mas agora n preciso mais. :)


GOSTEI 0
Jotas

Jotas

20/08/2008

Oi Paulão
Obrigadão pelas funcoes que vc me mandou tambem..
Mas Olha só: ainda nao consegui o mais facil

Eis o teu código:

var
Arq:TextFile;
begin
//Estas duas linhas são para configurar a Font, Tamanho e se é negrito ou não
Printer.canvas.font.name := ´Draft 10cpi´;
Printer.canvas.font.style := [];
//AssignPrn - Abre sempre a impressora padrão
//AssignFile - Você terá que informar a porta de impressão(´LPT1´)
AssignPrn(Arq); /
Rewrite(Arq);
while not eof(Arq) do
begin
Writeln(Arq
end;
end;

Eu quero imprimir os atrtibutos da minha table1 CodFunc,NomeFunc,Salario

Como atribuir a Tabe1, à variavel Arq ??
eu fiz assim: assignfile(arq, ´table1´)

Me ajuda ai, mais claramente, porque nao consegui
e eu preciso imprimir nas posicoes
por exemplo: PRINT.CANVAS.TESTOUT(10,10, ´ tABEL1.COD´ OU ARQ NAO SEI..,,

ha... coloque tambem o Begin.doc. e o Enddoc

Me explica por favor e desculpe
att.
Jotas


GOSTEI 0
Paulo

Paulo

20/08/2008

eu fiz assim: assignfile(arq, ´table1´)

Assim não vai funcionar mesmo. Você deve dar um While na tabela e vir relacionando cada campo à variavel arq:

while not Table.Eof do begin Writeln(arq,Table.FieldByName(´Campo´).AsString + ´-´ + Table.FieldByName(´Campo2´).AsString; Table.Next; end;

Desta forma você vai atribuindo à variável Arq, os valores dos campos.
Lembrando que você deve dar um AssignPrn ou AssignFile, rewrite e etc... antes, dar um First na tabela antes do While e etc...e um closefile(arq) no final de tudo.


GOSTEI 0
Jotas

Jotas

20/08/2008

Oi Paulo
Agora sim, Tá dando mais certo que Beleza Pura.

procedure TForm1.BitBtn1Click(Sender: TObject);
var
Arq:TextFile;
begin
tabela.Open;
//Estas duas linhas são para configurar a Font, Tamanho e se é negrito ou não
Printer.canvas.font.name := ´Draft 10cpi´;
Printer.canvas.font.style := [];
AssignFile(arq, ´LPT1´);
AssignPrn(arq);
Rewrite(Arq);
TABELA.First;
while not tabela.eof do
begin
Writeln(arq, Tabela.FieldByName(´CodFunci´).AsString + ´ - ´ + Tabela.FieldByName(´NomFunci´).AsString);
tabela.Next ;
end;
CloseFile(Arq);
end;

So Falta Uma pequena coisa...
Preciso de Começar a imprimir, o codigo na Coluna10, e o Nome a partir da coluna 50.

Como Funciona, o Printer.textOut() ??
Tem como colocá-lo aqui, em vez de Writln???
So mais essa, valeu?

Jotas


GOSTEI 0
Paulo

Paulo

20/08/2008

Nunca usei o Printer.TextOut(), mas te passei uma função(RelRepStr) que você pode ir macando as colunas, com espaços ou outra coisa.


GOSTEI 0
Jotas

Jotas

20/08/2008

Valeu Caro Paulo.

é uma pena, que nao pode ser facil igual ao Clipper5. (É MUITA COISA PRA ESCREVER, PARA IMPRIMIR UMA LINHA)

Entao se tiver calculos, Ai é que ferrou tudo...

Eu tenho que imprimir uma Fl. de Pagamento, ou um contracheque, e sao 3 colunas...

Nem sei como fazer..
Abraços, e mais uma vez Obrigado
att.
JOTAS


GOSTEI 0
Paulo

Paulo

20/08/2008

Se não resolveu ainda, então o seu Post não acabou. Se puder enviar seus códigos e estrutura das tabelas, talvez nesse fim-de-semana possamos te ajudar melhor, caso ainda não tenha resolvido. Não é tão complicado assim, é que você está vendo de primeira e está achando complexo, mas é mais simples que o Clipper. Aqui nós só encerramos um post, quando o outro lado disser, que está feito. Mande seus códigos que vamos te ajudar a concluir o trabalho.


GOSTEI 0
Godzilla_xf

Godzilla_xf

20/08/2008

Boa noite amigos do DevMedia é o seguinte: Já tentei de tudo por aqui, e nao consigo um exemplo simples de Imprimir direto na Impressora. Será que alguem pode me mandar um código de meia duzia de linhas para começo? vai ser de grande valia pra dar os primeiros passos. teria que ser com dados de uma TABLE, ou seja vou imprimir todos os clientes da tabela CodCli na posicao 10, NomeCli na posiçao 15 , e DatCadastro na posiçao 50 Nao se preocupem com salto de pagina ou fim de arquivo, só quero ver a impressora imprimindo. Quanto ´a visualizaçao do relatorio, fica pra outra oportunidade, mas de repente eu aprendo isso. Obnrigado a todos Jotas [b:8d1d654a63][/b:8d1d654a63]


Olá, por que vc naum usa os componentes do Vinicius2k, o VDOPrint: http://sourceforge.net/project/showfiles.php?group_id=164969&package_id=186980

ou o RDPrint:
http://www.deltress.com.br/rdprint.htm


GOSTEI 0
Jotas

Jotas

20/08/2008

Ola Paulo
Fico alegre em poder contar com a sua colaboraçao, e de todos aí.

Eu vou me aprofundar mais um pouco em relatorios, pois eu ainda estou engatinhando, e acabo me complicando todo, e atrapalhando voces.

Imprimir um relatório simples, uma linha em baixo da outra, eu sei fazer no Rave, ou qualquer outro aplicativo.

Se eu Souber imprimir uma Fl.dePagamento, onde Vc. Tem Uma coluna para Nome do Funcionario, Base de Salario, etc.. e Outra no Meio do Formulario, com os Proventos em ordem de codigos... e a ultima coluna para descontos tambem em ordem de código.
Se eu aprender a fazer isso, estou apto para fazer quaisquer relatorios.
Voce acha que o Rave, ou RDPrint, Faz isso? Deve fazer sim, eu que nao conheço ainda..
EXEMPLO ASSIM:
RELATORIO DE FOLHA DE PAGAMENTO
--------------------------------------------------------------------------------

Nome REF- proventos REF - descontos
Admissao
----------------------------------------------------------------------------------
Jose de Tal 001-Salarios 101 - Inss
12//05/2008 002-Ferias 102 - Irf
003-O.Ganhos 103 - C.Sindical
105 - Adiantamento

Base IR Total de Prov
Base INSS Total Descontos Liquido a Receber:
___________________________________________________________

outro funcionario ............


Bem, Paulo, talvez me aprofundando no RAVE, eu consiga um lealult parecido, nem que tenha que usar um monte de Bandas etc...

Como disse, vou Tentar, se nao conseguir, vou mandar Um BD pra voce, com 4 tabelas, e te mando o que eu gostaria de aprender.

Obrigado Mais uma Vez, e a Todos ai
Jotas.


GOSTEI 0
POSTAR