Fórum Printer de edits com canvas #241379
05/07/2004
0
Gostaria de fazer impressão de meus valores presentes nos campos edits de forma a usar o canvas, pois necessito futuramente impressão fiscal em uma Epson Lx 300+
Printer.Orientation:= poPortrait; //Define orientação da página
Printer.BeginDoc; //Inicia impressão
Printer.Canvas.Pen.Width:= 1; //Largura da caneta
Printer.Canvas.Font.Name:= ´Courier New´; //Nome da fonte
Printer.Canvas.Font.Size:= 10; //Tamanho da fonte
Printer.Canvas.TextOut(Edit1.Text); // ???????????
Printer.Canvas.TextOut(Edit2.text); // ???????????
Printer.EndDoc;
E em relacao ao posicionamento X (linha) e Y (Coluna), como eu poderia fazer esse tratamento ? :oops:
Ce
Curtir tópico
+ 0Posts
05/07/2004
Vinicius2k
Veja estes tópicos :
http://delphiforum.icft.com.br/forum/viewtopic.php?t=45404
http://delphiforum.icft.com.br/forum/viewtopic.php?t=45486
http://delphiforum.icft.com.br/forum/viewtopic.php?t=41518
Vc tbm pode fazer um teste e/ou analisar os fontes de um componente que desenvolvi especificamente para isso e que pode facilitar seu trabalho:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=43101
Espero ter ajudado...
T+
Gostei + 0
05/07/2004
Ce
Imaginava ser mais prático essa forma de impressão. 8)
valeu
Gostei + 0
05/07/2004
Vinicius2k
O Printer.Canvas é simples... trabalhoso pq vc precisa escrever bastante, mas não é difícil, vc vai ver...
No meu componente eu não uso canvas se a impressora for matricial... o que torna a impressão rápida como nas aplicações DOS...
Boa Sorte !
T+
Gostei + 0
05/07/2004
Ce
olhei seu componente, ta tranquilo.. mas.. mas.. acho que eu nao estou tendo a lógica do printer ou nao me expressando direito..
vi no seu DEMO do componente sua forma de impressão.. mas no meu caso, quero imprimir algo que ainda nao sei, por exemplo, algo preenchido em uma edit ou combobox, isso tudo nao se tratando de ligações com tabelas e sim com um texto qualquer q eu tiver ! :shock:
:roll: ou nao tem fundamento isso que quero fazer? :lol:
Gostei + 0
05/07/2004
Vinicius2k
Seja diretamente com o a TPrinter ou usando um outro componente, não precisa ser fixado o que será impresso...
Na função utilizada para impressão (TextOut, por exemplo), o conteúdo do parametro que indicará o texto a ser impresso pode ser um Edit1.Text sem problemas...
Exatamente como vc citou no seu primeiro post, porém falta ali as designações de linha e coluna onde será impresso o texto que vc deseja...
T+
Gostei + 0
06/07/2004
Ce
const
SAIDA : array[1..2] of Integer = (131,7); //posicionamento em x e y
ENTRADA : array[1..2] of Integer = (151,7);
etc..
//CONVERTE MM PARA PIXELS NA RESOLUCAO DO EIXO X
function MMtoPixX(MM: Integer): Longint;
var mmPointX: Real;
PageSize,OffSetUL: TPoint;
begin
mmPointX:= Printer.PageWidth / GetDeviceCaps(Printer.Handle,HORZSIZE);
Escape(Printer.Handle,GETPRINTINGOFFSET,0,nil,@OffSetUL);
Escape(Printer.Handle,GETPHYSPAGESIZE,0,nil,@PageSize);
if MM > 0 then
Result:= round((MM * mmPointX) - OffSetUL.X)
else Result:= round(MM * mmPointX);
end;
//CONVERTE MM PARA PIXELS NA RESOLUCAO DO EIXO Y
function MMtoPixY(MM: Integer): Longint;
var mmPointY: Real;
PageSize,OffSetUL: TPoint;
begin
mmPointY:= Printer.PageHeight / GetDeviceCaps(Printer.Handle,VERTSIZE);
Escape(Printer.Handle,GETPRINTINGOFFSET,0,nil,@OffSetUL);
Escape(Printer.Handle,GETPHYSPAGESIZE,0,nil,@PageSize);
if MM > 0 then
Result:= Round((MM * mmPointY) - OffSetUL.Y)
else Result:= Round(MM * mmPointY);
end;
Printer.Canvas.TextOut(MMtoPixX(SAIDA[1]),MMtoPixY(SAIDA[2]),ComboSaida.Text);
Printer.Canvas.TextOut(MMtoPixX(ENTRADA[1]),MMtoPixY(ENTRADA[2]),ComboEntrada.Text); :roll:
valeu.. 8)
Gostei + 0
06/07/2004
Vinicius2k
Internamente meu componente usava métodos bem parecidos, mas cheguei a conclusão que Canvas.TextWidth e Canvas.TextHeight davam o mesmo resultado de forma bem mais simples...
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)