Impressão de etiquetas com TPrinter
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
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
Curtidas 0
Respostas
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
10/08/2005
Grande Edilcimar,
Será que vc poderia me apresentar o seu exemplo que funciona?
Será que vc poderia me apresentar o seu exemplo que funciona?
GOSTEI 0
Israel Bispo
10/08/2005
Sobe
GOSTEI 0
Israel Bispo
10/08/2005
sobe
GOSTEI 0
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;
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
10/08/2005
sobe
GOSTEI 0
Israel Bispo
10/08/2005
Sobe
(ainda não consegui uma solução - quero agradecer ao meu amigo Edilcilmar pelo apoio).
(ainda não consegui uma solução - quero agradecer ao meu amigo Edilcilmar pelo apoio).
GOSTEI 0