Printer de edits com canvas
Olá,
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:
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
Curtidas 0
Respostas
Vinicius2k
05/07/2004
Colega,
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+
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
Ce
05/07/2004
blz Vinicius .. vou olhar o componente.. mas.. nao existe uma maneira simples de impressão de edits ou labels pelo canvas ? :shock:
Imaginava ser mais prático essa forma de impressão. 8)
valeu
Imaginava ser mais prático essa forma de impressão. 8)
valeu
GOSTEI 0
Vinicius2k
05/07/2004
Cesar,
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+
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
Ce
05/07/2004
blz vinivius..
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:
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
Vinicius2k
05/07/2004
Cesar,
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+
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
Ce
05/07/2004
Beleza Vinicius, na verdade resolvi este problema com o uso de funções de conversoes de MM para Pixels no qual consigo me orientar no posicionamento.
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)
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
Vinicius2k
05/07/2004
Blz ! O importante é resolver...
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+
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