Printer de edits com canvas

Delphi

05/07/2004

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:


Ce

Ce

Curtidas 0

Respostas

Vinicius2k

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+


GOSTEI 0
Ce

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


GOSTEI 0
Vinicius2k

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+


GOSTEI 0
Ce

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:


GOSTEI 0
Vinicius2k

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+


GOSTEI 0
Ce

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)


GOSTEI 0
Vinicius2k

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+


GOSTEI 0
POSTAR