Eu gero um arquivo texto, assim fica fácil imprimir, visualizar ou ainda
mandar um relatório por e-mail.


----- Original Message ----- 
From: "Eduardo RC Neto" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, October 28, 2004 3:53 PM
Subject: RES: [delphi-br] QR + Matricial, a luta continua



Para fazer um preview, eu jogo todos os dados em um TMemo, e depois
mando imprimir esse memo linha a linha. Dah um trabalho danado,
mas depois de feito uma vez, basta reutiliza-lo em outros sistemas.

Abraços,

Eduardo RC Neto
Desenvolvimento de Sistemas
----------------------------------------------
Archive ISP - Rio de Janeiro - RJ
[EMAIL PROTECTED]
www.archive.com.br


-------Mensagem original-------

De: [EMAIL PROTECTED]
Data: 10/28/04 13:51:02
Para: '[EMAIL PROTECTED]'
Assunto: RES: [delphi-br] QR + Matricial, a luta continua

Na verdade tem muito tempo que nao mexo com o TPrinter, era ainda nos tempos
do Delphi 2. Pode até ser que de lá pra cá eles mudaram isto, mas eu lembro
que antes era em milimetros porque eu vivia tendo problemas para gerar
relatórios contínuos em formulários de 80 colunas



[]s

Walter Alves Chagas Junior
Projeto e desenvolvimento
Telemont Engenharia de telecomunicações
[EMAIL PROTECTED]
Fone: (31) 3389-8215 Fax: (31) 3389-8200



> -----Mensagem original-----
> De: Daniel / Tecnobyte [mailto:[EMAIL PROTECTED]
> Enviada em: quinta-feira, 28 de outubro de 2004 13:09
> Para: [EMAIL PROTECTED]
> Assunto: Re: [delphi-br] QR + Matricial, a luta continua
>
>
>
> > O TPrinter trabalha com milimetros e não com Pixels.
> >  Walter Alves Chagas Junior
>
> Você está equivocado. Quando usa-se TPrinter para imprimir,
> na verdade o
> posicionamento é feito pelo objeto Cantas associado ao Printer
> (Printer.Canvas). Normalmente usa-se:
>
> Printer.Canvas.TextOut(...);
> ou
> Printer.Canvas.TextRect(...);
>
> Estes métodos trabalham com posicionamento em pixels e não em
> milímetros.
> Quer um exemplo? Então experimente rodar o código abaixo para
> imprimir em
> duas impressoras com resoluções diferentes (exemplo: Epson LX300 e HP
> Deskjet).
>
> Printer.BeginDoc;
> try
>   Printer.Canvas.TextOut(0, 0, 'Zero, Zero');
>   Printer.Canvas.TextOut(50, 50, 'Cinquenta, Cinquente');
>   Printer.Canvas.TextOut(100, 100, 'Cem, Cem');
> finally
>   Printer.EndDoc;
> end;
>
> Você vai observar que a distância entre os textos impressos
> variam muito por
> causa das diferentes resoluções das impressoras. Na Epson
> LX300 os textos
> devem ficar bem distantes entre si (a quantidade de pontos
> por polegada é
> menor). Já na HP Deskjet esta distância deverá ser bem
> pequena (a quantidade
> de pontos por polegada é bem maior). Se Printer trabalhasse
> com mm, cm ou
> polegada, o posicionamento não variaria de uma impressora
> para outra (na
> prática varia um pouco sim por causa das margens e
> posicionamento físico do
> papel).
>
> Agora se você quer imprimir em mm, cm ou polegadas, então
> terá que pegar a
> resolução da impressora usando uma função da API do Windows
> (GetDeviceCaps)
> e fazer as devidas conversões. Eis um exemplo:
>
> ---------------------------- Início do código --------------------
> var
>   ResolucaoX: integer;
>   ResolucaoY: integer;
>
> function mm2px(const X, Y: integer): TPoint;
> begin
>   Result.X := Trunc(ResolucaoX / 25.4 * X);
>   Result.Y := Trunc(ResolucaoY / 25.4 * Y);
> end;
>
> function cm2px(const X, Y: integer): TPoint;
> begin
>   Result.X := Trunc(ResolucaoX / 2.54 * X);
>   Result.Y := Trunc(ResolucaoY / 2.54 * Y);
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
>   P: TPoint;
>   R: TRect;
> begin
>   Printer.BeginDoc;
>   try
>     ResolucaoX := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
>     ResolucaoY := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
>
>     { Desenha uma cantoneira de 1cm na posição zero do papel }
>     P := cm2px(1, 1);
>     Printer.Canvas.MoveTo(P.X, 0);
>     Printer.Canvas.LineTo(0, 0);
>     Printer.Canvas.LineTo(0, P.Y);
>
>     { Imprime um texto na posição 20mm,30mm }
>     P := mm2px(20, 30);
>     Printer.Canvas.TextOut(P.X, P.Y, '20mm, 30mm');
>
>     { Imprime um texto na posição 20mm, 50mm }
>     P := mm2px(20, 50);
>     Printer.Canvas.TextOut(P.X, P.Y, '20mm, 50mm');
>
>     { Imprime um texto na posição 3cm, 4cm }
>     P := cm2px(3, 4);
>     Printer.Canvas.TextOut(P.X, P.Y, '3cm, 4cm');
>
>     { Desenha um retângulo de 4cm X 2cm }
>     R.TopLeft := cm2px(8, 8);
>     R.BottomRight := cm2px(12, 10);
>     Printer.Canvas.Rectangle(R);
>   finally
>     Printer.EndDoc;
>   end;
> end;
> ------------------------- Fim do exemplo --------------
>
> > É hiper trabalhoso, e não tem preview. isto voce terá que
> fazer na mão
> >  Walter Alves Chagas Junior
>
> Quanto a esta afirmação, o que tenho a dizer é o seguinte:
>
> - Realmente fazer preview é bem trabalhoso. Talvez a maior
> encrenca seria
> montar o esquema de paginação, etc e tal. Quanto ao posicionamento dos
> elementos na tela, o procedimento é semelhante ao mostrado acima,
> considerando-se a resolução da tela (não estou falando em
> 640x480, 800x600,
> etc... estou falando em "pontos por polegada"). Muitas vezes, porém o
> preview é desnecessário.
>
> - Com relação à questão da impressão ser ou não trabalhosa,
> isto depende
> muito das rotinas que você tenha para trabalhar. Se quiser
> fazer todas as
> conversões diretamente no código principal, onde emite a
> nota, realmente
> terá uma grande bagunça, mas se criar funções e classes
> adequadas para fazer
> o tratamento "chato" da impressão, então tudo ficará bastante fácil.
>
> Na minha opinião realmente o "x da questão" está somente no
> preview, pois
> este teria que ser construído caso se deseja. Mas também é um
> trabalho que
> seria feito apenas uma vez e usado em muitas situações semelhantes.
>
> Atenciosamente.
>
> Daniel P. Guimarães
> Tecnobyte Informática
> www.tecnobyte.com.br
>
>
>
> -- 
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
>
> Para ver as mensagens antigas, acesse:
>  http://br.groups.yahoo.com/group/delphi-br/messages
>
> Para falar com o moderador, envie um e-mail para:
>  [EMAIL PROTECTED] ou [EMAIL PROTECTED]
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED] ou [EMAIL PROTECTED]



Yahoo! Grupos, um serviço oferecido por:








Links do Yahoo! Grupos

Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do
Yahoo!.




[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]

Links do Yahoo! Grupos













-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a