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]
 
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