Fórum Impressão de etiquetas com TPrinter #291312

10/08/2005

0

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

Responder

Posts

10/08/2005

Edilcimar

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


Responder

Gostei + 0

10/08/2005

Israel Bispo

Grande Edilcimar,

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


Responder

Gostei + 0

11/08/2005

Israel Bispo

Sobe


Responder

Gostei + 0

12/08/2005

Israel Bispo

sobe


Responder

Gostei + 0

13/08/2005

Edilcimar

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;


Responder

Gostei + 0

15/08/2005

Israel Bispo

sobe


Responder

Gostei + 0

30/08/2005

Israel Bispo

Sobe

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar