Impressão de etiquetas com TPrinter

Delphi

10/08/2005

Olá amigos,

Será que alguém poderia me ajudar. Eu tenho que imprimir etiquetas na impressora matricial e estou tendo dificuldades quanto ao tamanho do papel (altura). Abaixo o código que estou utilizando

procedure TEtiqueta.ConfiguraImpressora;
var
ADevice, ADriver, APort: Array[0..255] of Char;
DeviceMode: THandle;
M: PDevMode;
S: String;
begin
Printer.PrinterIndex := FImpressoraPadrao;
S := Printer.Printers[Printer.PrinterIndex];
Printer.GetPrinter(ADevice, ADriver, APort, DeviceMode);
M := GlobalLock(DeviceMode);
if M <> nil then
begin

M^.dmFields := M^.dmFields or DM_PAPERSIZE;
M^.dmPaperSize := 256;

M^.dmFields := M^.dmFields or DM_PAPERLENGTH;
M^.dmPaperLength := ( 256 * TOTAL_REGISTROS ) );

M^.dmFields := M^.dmFields or DM_PAPERWIDTH;
M^.dmPaperWidth := 3500;

Printer.SetPrinter(ADevice, ADriver, APort, DeviceMode);

GlobalUnLock(DeviceMode);
end;

// -> Detalhes de impressão
Printer.Title := ´Impressão de etiquetas´;

// -> Seta fonte
Printer.Canvas.Font.Name := ´Draft 17cpi´;
Printer.Canvas.Font.Size := 8;
end;


Essa variável TOTAL_REGISTROS no M^.dmPaperLength é o total da minha tabela.

Interessante que quando vou imprimir 30 ou 40 registros, ela funciona. MAS PARA GRANDES QUANTIDADES ela não vai.

Muito obrigado

Israel Bispo


Israel Bispo

Israel Bispo

Curtidas 0

Respostas

Edilcimar

Edilcimar

10/08/2005

eu imprimo com tprinter sem determinar o tamanho do papel pois no formulário contínuo de etiquetas é como se o papel fosse infinito, portanto vc nao precisa determinar o tamanho, saia imprimindo normalmente aumentando o tamanho do número da linha normalmente e vá imprimindo, aí não terá problemas, eu já imprimi centenas de etiquetas deste modo sem nenhum problema


GOSTEI 0
Israel Bispo

Israel Bispo

10/08/2005

Grande Edilcimar,

Será que vc poderia me apresentar o seu exemplo que funciona?


GOSTEI 0
Israel Bispo

Israel Bispo

10/08/2005

Sobe


GOSTEI 0
Israel Bispo

Israel Bispo

10/08/2005

sobe


GOSTEI 0
Edilcimar

Edilcimar

10/08/2005

está aí é para mala direta com etiquetas 89x23x2colunas
procedure TForm98.Button1Click(Sender: TObject);
var
Linha, Cont : Integer;
Nome1, Rua1, Numero1, Apartamento1, Cep1, Bairro1 : String;
Cidade1, Estado1, Endereco1 : String;
Nome2, Rua2, Numero2, Apartamento2, Cep2, Bairro2 : String;
Cidade2, Estado2, Endereco2 : String;
Indice1, Indice2 : Real;
begin
Indice1 := Printer.PageHeight;
Indice2 := Printer.PageWidth;
Cursor := crHourGlass;
Printer.BeginDoc;
Printer.Canvas.Font.Name := ´Arial´;
Printer.Canvas.Font.Size := 6;
Linha := 0;
Cont := 1;
With Table1 do
Begin
First;
While not eof do
Begin
Nome1 := FieldByName(´CLIENTE´).AsString;
Rua1 := Copy(FieldByName(´RUA´).AsString, 1,25);
Numero1 := FieldByName(´NUMERO´).AsString;
Apartamento1 := FieldByName(´APARTAMENTO´).AsString;
Cep1 := FieldByName(´CEP´).AsString;
Bairro1 := FieldByName(´BAIRRO´).AsString;
Cidade1 := FieldByName(´CIDADE´).AsString;
Estado1 := FieldByName(´ESTADO´).AsString;
Apartamento1 := Trim(Apartamento1);
Endereco1 := Trim(Rua1) + ´, ´ + Numero1;
If Length(Apartamento1) > 0 then
Endereco1 := Endereco1 + ´ Ap.´ + Apartamento1;
Next;
Nome2 := FieldByName(´CLIENTE´).AsString;
Rua2 := Copy(FieldByName(´RUA´).AsString, 1,25);
Numero2 := FieldByName(´NUMERO´).AsString;
Apartamento2 := FieldByName(´APARTAMENTO´).AsString;
Cep2 := FieldByName(´CEP´).AsString;
Bairro2 := FieldByName(´BAIRRO´).AsString;
Cidade2 := FieldByName(´CIDADE´).AsString;
Estado2 := FieldByName(´ESTADO´).AsString;
Apartamento2 := Trim(Apartamento2);
Endereco2 := Trim(Rua2) + ´, ´ + Numero2;
Printer.Canvas.TextOut(000, Linha, Nome1);
Printer.Canvas.TextOut(StrToInt(FloatToStr(Int(Indice2 * 350))), Linha, Nome2);
Linha := Linha + StrToInt(FloatToStr(Int(Indice1 * 21)));
Printer.Canvas.TextOut(000, Linha, Endereco1);
Printer.Canvas.TextOut(StrToInt(FloatToStr(Int(Indice2 * 350))), Linha, Endereco2);
Linha := Linha + StrToInt(FloatToStr(Int(Indice1 * 21)));
Printer.Canvas.TextOut(000, Linha, Cep1 + ´ - ´ + Bairro1);
Printer.Canvas.TextOut(StrToInt(FloatToStr(Int(Indice2 * 350))), Linha, Cep2 + ´ - ´ + Bairro2);
Linha := Linha + StrToInt(FloatToStr(Int(Indice1 * 21)));
Printer.Canvas.TextOut(000, Linha, Cidade1 + ´ - ´ + Estado1);
Printer.Canvas.TextOut(StrToInt(FloatToStr(Int(Indice2 * 350))), Linha, Cidade2 + ´ - ´ + Estado2);
Cont := Cont + 1;
If Cont = 5 then
Begin
Cont := 1;
Linha := Linha + StrToInt(FloatToStr(Int(Indice1 * 103)));
End
Else
Linha := Linha + StrToInt(FloatToStr(Int(Indice1 * 102)));
Next;
End;
End;
Printer.EndDoc;
Cursor := crDefault;
end;


GOSTEI 0
Israel Bispo

Israel Bispo

10/08/2005

sobe


GOSTEI 0
Israel Bispo

Israel Bispo

10/08/2005

Sobe

(ainda não consegui uma solução - quero agradecer ao meu amigo Edilcilmar pelo apoio).


GOSTEI 0
POSTAR