QuickReport Parada na Impressão sem dar Eject

Delphi

22/04/2005

Ola, estou querendo fazer algo que talvez seja improvável de se fazer, mas vamos la:

Gostaria de saber se tem como enviar uma página para a impressora e parar em um determinado ponto, imaginem uma impressão de cheques em um formulário A4, onde 4 cheques podem ser impressos, digamos que mande imprimir 3 cheques, gostaria que a impressora parasse no 3 e não desse o Eject. Lembrando que não quero usar impressoras matriciais.

A solução poderia ser para qualquer outro Report, Quick, Rave ou qualquer outro, agradeço desde ja o apoio.


Atgomes

Atgomes

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

22/04/2005

Parar em um determinado ponto numa folha solta sem ejetar (não formulário contínuo) acho que não dá mesmo, mas vc pode lançar mão de alguns truques para iniciar a impressão no ponto desejado da folha, o que é muito útil, por exemplo, em folhas de etiquetas para não desperdiçá-las.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

22/04/2005

Ola, estou querendo fazer algo que talvez seja improvável de se fazer, mas vamos la: Gostaria de saber se tem como enviar uma página para a impressora e parar em um determinado ponto, imaginem uma impressão de cheques em um formulário A4, onde 4 cheques podem ser impressos, digamos que mande imprimir 3 cheques, gostaria que a impressora parasse no 3 e não desse o Eject. Lembrando que não quero usar impressoras matriciais. A solução poderia ser para qualquer outro Report, Quick, Rave ou qualquer outro, agradeço desde ja o apoio.

Colega,

Defina o tamanho do formulário pelo tamanho de cada cheque ao invés de 4 (quatro).


GOSTEI 0
Atgomes

Atgomes

22/04/2005

[quote:e5795fe46e=´Aroldo Zanela´]
Ola, estou querendo fazer algo que talvez seja improvável de se fazer, mas vamos la: Gostaria de saber se tem como enviar uma página para a impressora e parar em um determinado ponto, imaginem uma impressão de cheques em um formulário A4, onde 4 cheques podem ser impressos, digamos que mande imprimir 3 cheques, gostaria que a impressora parasse no 3 e não desse o Eject. Lembrando que não quero usar impressoras matriciais. A solução poderia ser para qualquer outro Report, Quick, Rave ou qualquer outro, agradeço desde ja o apoio.

Colega,

Defina o tamanho do formulário pelo tamanho de cada cheque ao invés de 4 (quatro).[/quote:e5795fe46e]


Caro amigo Aroldo Zanela, acho que ja fiz um teste como esse e não funcionou mas vou tentar novamente, para ver se da certo, Grato.


GOSTEI 0
Atgomes

Atgomes

22/04/2005

[quote:da577fff02=´Aroldo Zanela´][quote:da577fff02=´atgomes´]Ola, estou querendo fazer algo que talvez seja improvável de se fazer, mas vamos la: Gostaria de saber se tem como enviar uma página para a impressora e parar em um determinado ponto, imaginem uma impressão de cheques em um formulário A4, onde 4 cheques podem ser impressos, digamos que mande imprimir 3 cheques, gostaria que a impressora parasse no 3 e não desse o Eject. Lembrando que não quero usar impressoras matriciais. A solução poderia ser para qualquer outro Report, Quick, Rave ou qualquer outro, agradeço desde ja o apoio.

Colega,

Defina o tamanho do formulário pelo tamanho de cada cheque ao invés de 4 (quatro).[/quote:da577fff02]


Caro amigo Aroldo Zanela, acho que ja fiz um teste como esse e não funcionou mas vou tentar novamente, para ver se da certo, Grato.[/quote:da577fff02]


Então amigo Aroldo Zanela, de fato a solução não resolve o meu problema, pois mesmo definindo o tamanho do papel como o tamanho do cheque ele de qualquer forma me da o Eject.
:(


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

22/04/2005

Colega,

Na impressora está definida com este tamanho também? (Configuraçoes -> Impressoras -> Botão diretiro sobre a impressoras -> Propriedades)


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

22/04/2005

Colega,

Onde se lê: diretiro
Leia-se: direito


GOSTEI 0
Edilcimar

Edilcimar

22/04/2005

é verdade que ele ejetará porém ejetará no tamanho do papel, o que seignifica que ficará parado no ínicio do próximo cheque, eu utilizo isto para impressão de NF em papel contínuo com papel personalizado e funciona


GOSTEI 0
Edilcimar

Edilcimar

22/04/2005

só uma correção, eu não notei que era QR é que eu utilizo Trpinter


GOSTEI 0
Atgomes

Atgomes

22/04/2005

só uma correção, eu não notei que era QR é que eu utilizo Trpinter


Vou fazer mais teste agora Aroldo Zanela, para ver se funcionará com o quick e edicilmar, usando o TPrinter vou continuar podendo imprimir windows sem problemas, você por acaso tem exemplo para me enviar ?
Grato.


GOSTEI 0
Atgomes

Atgomes

22/04/2005

Bom vamos ao teste, ajustei o papel da impressora para o tamanho do cheque, e o que o quick me faz, imprime um cheque em uma folha da o eject e depois imprime o segundo cheque na outra folha e assim por diante isto usando o Quick.


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/04/2005

Pelo que já vi e testei, esse truque de acertar o tamanho do papel para o tamanho de cada ´página´ para que não ejete, só funciona com formulário contínuo e não folha solta.


GOSTEI 0
Edilcimar

Edilcimar

22/04/2005

é só configurar a página para o tamanho do cheque e imprimir utilizando printer.canvas.textou(coluna,linha,texto);
eu não tenho exemplo de cheque, eu utilizo para nota fiscal tamanho personalizado


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

22/04/2005

Bom vamos ao teste, ajustei o papel da impressora para o tamanho do cheque, e o que o quick me faz, imprime um cheque em uma folha da o eject e depois imprime o segundo cheque na outra folha e assim por diante isto usando o Quick.

Colega,

E se você destacar o formulário antes da impressão?


GOSTEI 0
Atgomes

Atgomes

22/04/2005

é só configurar a página para o tamanho do cheque e imprimir utilizando printer.canvas.textou(coluna,linha,texto); eu não tenho exemplo de cheque, eu utilizo para nota fiscal tamanho personalizado



Infelizmente tive de deixar este problema de lado para resolver outras coisas mas tenho de resolver isso de alguma forma, Edcilmar, usei o exemplo que deixou aqui Printer.Canvas.TextOut, e mesmo usando esta impressão direta a impressora não obedece e EJETA a folha.


GOSTEI 0
Atgomes

Atgomes

22/04/2005

é só configurar a página para o tamanho do cheque e imprimir utilizando printer.canvas.textou(coluna,linha,texto); eu não tenho exemplo de cheque, eu utilizo para nota fiscal tamanho personalizado



EDICILMAR SEGUE O EXEMPLO QUE USEI:


procedure TForm1.Button1Click(Sender: TObject);
var
Linha: integer;
Tamanho: integer;
Coluna: integer;

begin
Database1.Connected := tRUE;
table1.Open;
Printer.Orientation := poPortrait;
Printer.BeginDoc;

Printer.Canvas.Pen.Width := 5;
Printer.Canvas.Font.Name := ´Times New Roman´;
Printer.Canvas.Font.Size := 10;

Linha := 20;
Coluna := 20;
Tamanho := Printer.Canvas.TextWidth(´a´);
Table1.First;

while not Table1.Eof do
begin
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0, Linha, ´Relação de Clientes´);
Linha := Linha - Printer.Canvas.Font.Height + 5;
Printer.Canvas.TextOut(Coluna, Linha, ´Cod´);
Coluna := Coluna + (Tamanho * 5);
Printer.Canvas.TextOut(Coluna, Linha, ´Nome´);
Coluna := Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna, Linha, ´Endereço´);
Coluna := Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5;
end;

Coluna := 20;
Printer.Canvas.TextOut(Coluna, Linha, Table1.FieldByName(´Codigo´).AsString);
Coluna := Coluna + (Tamanho * 5);
Printer.Canvas.TextOut(Coluna, Linha, Table1.FieldByName(´Nome´).AsString);
Coluna := Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna, Linha, Table1.FieldByName(´ENDER´).AsString);
Coluna := Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5;
Table1.Next;

if Linha > Printer.PageHeight - 20 then
begin
Printer.NewPage;
Linha := 20;
end;

end;
Printer.EndDoc;
end;


GOSTEI 0
Atgomes

Atgomes

22/04/2005

é só configurar a página para o tamanho do cheque e imprimir utilizando printer.canvas.textou(coluna,linha,texto); eu não tenho exemplo de cheque, eu utilizo para nota fiscal tamanho personalizado



Edicilmar esqueci de um detalhe Antes do BeginDoc, estou usando esta procedure para setar a página no tamanho do cheque.


procedure TForm1.SetPrinterPage(Width, Height : LongInt);
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
begin
Printer.GetPrinter(Device, Driver, Port, hDMode);
If hDMode <> 0 then
begin
pDMode := GlobalLock( hDMode );
If pDMode <> nil then
begin
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := Width;
pDMode^.dmPaperLength := Height;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
GlobalUnlock( hDMode );
end;
end;
end;


GOSTEI 0
POSTAR