Fórum Aonde eu encontro comp. Código de Barras para QuickReport 2 #298070
02/10/2005
0
Max.jgs
Curtir tópico
+ 0Posts
05/10/2005
Max.jgs
Alguem pode me ajuadar...
Gostei + 0
05/10/2005
Adriano Santos
[list:3c60e65bef]Cara, o que você quer exatamente?
Que código de barras?
Tem o EAN?
Tente procurar no [url=http://www.torry.ru]Torry´s Page[/url][/list:u:3c60e65bef]
Gostei + 0
05/10/2005
Max.jgs
[list:f4d01761e1]Cara, o que você quer exatamente?
Que código de barras?
Tem o EAN?
Tente procurar no [url=http://www.torry.ru]Torry´s Page[/url][/list:u:f4d01761e1][/quote:f4d01761e1]
Sim eu quero codigo de barras, que seja utilizado em Quickreport2....
Gostei + 0
05/10/2005
Adriano Santos
Sim eu quero codigo de barras, que seja utilizado em Quickreport2....[/quote:bff1a202cf]
[b:bff1a202cf]max.jgs[/b:bff1a202cf], Desculpe, mas vamos esclarecer algumas coisas.
Códigos de Barras seguem uma padronização que é estipulada peo [url=www.ean.org.br]EAN[/url]. Isso significa que para cada tipo de produto existe um tipo de código de barras diferente. Por exemplo:
O código de barras de uma revista vendida na banca de jornal, é diferente do código de barras da lata de sardinha que você compra no supermercado. Ou seja, precisamos saber o que vc vai fazer com este código de barras.
Dependendo do que for você nem precisa de componente. Para boleto bancário por exemplo eu tinha uma função que gerava num TImage o código de barras sozinho passando apenas um número.
Gostei + 0
05/10/2005
Max.jgs
Sim eu quero codigo de barras, que seja utilizado em Quickreport2....[/quote:dc6654ca20]
[b:dc6654ca20]max.jgs[/b:dc6654ca20], Desculpe, mas vamos esclarecer algumas coisas.
Códigos de Barras seguem uma padronização que é estipulada peo [url=www.ean.org.br]EAN[/url]. Isso significa que para cada tipo de produto existe um tipo de código de barras diferente. Por exemplo:
O código de barras de uma revista vendida na banca de jornal, é diferente do código de barras da lata de sardinha que você compra no supermercado. Ou seja, precisamos saber o que vc vai fazer com este código de barras.
Dependendo do que for você nem precisa de componente. Para boleto bancário por exemplo eu tinha uma função que gerava num TImage o código de barras sozinho passando apenas um número.[/quote:dc6654ca20]
Você pode me enviar esta funcção e também o componente codigo de barras, pois um dia eu precisarei e quando isto acontecer não terei nenhum problema.....
E-mail: max.jgs@ibest.com.br
Gostei + 0
05/10/2005
Adriano Santos
Gostei + 0
05/10/2005
Adriano Santos
Estas dicas estão presentes do arquivo dtdelphi7.chm que você encontra na internet.
[color=red:eec55ac8c3][b:eec55ac8c3]Criar Código de Barras 2x5i[/b:eec55ac8c3][/color:eec55ac8c3]
Procedure CriaCodigo(Cod : String; Imagem : TCanvas);
Const
digitos : array[´0´..´9´] of string[5]= (´00110´,
´10001´,
´01001´,
´11000´,
´00101´,
´10100´,
´01100´,
´00011´,
´10010´,
´01010´);
Var
Numero : String;
Cod1 : Array[1..1000] Of Char;
Cod2 : Array[1..1000] Of Char;
Codigo : Array[1..1000] Of Char;
Digito : String;
c1,c2 : Integer;
x,y,z,h : LongInt;
a,b,c,d : TPoint;
I : Boolean;
Begin
Numero := Cod;
For x := 1 to 1000 Do
Begin
Cod1 [x] := 0;
Cod2 [x] := 0;
Codigo[x] := 0;
End;
c1 := 1;
c2 := 1;
x := 1;
For y := 1 to Length(Numero) div 2 do
Begin
Digito := Digitos[Numero[x ]];
For z := 1 to 5 do
Begin
Cod1[c1] := Digito[z];
Inc(c1);
End;
Digito := Digitos[Numero[x+1]];
For z := 1 to 5 do
Begin
Cod2[c2] := Digito[z];
Inc(c2);
End;
Inc(x,2);
End;
y := 5;
Codigo[1] := ´0´;
Codigo[2] := ´0´;
Codigo[3] := ´0´;
Codigo[4] := ´0´; { Inicio do Codigo }
For x := 1 to c1-1 do
begin
Codigo[y] := Cod1[x]; Inc(y);
Codigo[y] := Cod2[x]; Inc(y);
end;
Codigo[y] := ´1´; Inc(y); { Final do Codigo }
Codigo[y] := ´0´; Inc(y);
Codigo[y] := ´0´;
Imagem.Pen .Width := 1;
Imagem.Brush.Color := ClWhite;
Imagem.Pen .Color := ClWhite;
a.x := 1; a.y := 0;
b.x := 1; b.y := 79;
c.x := 2000; c.y := 79;
d.x := 2000; d.y := 0;
Imagem.Polygon([a,b,c,d]);
Imagem.Brush.Color := ClBlack;
Imagem.Pen .Color := ClBlack;
x := 0;
i := True;
for y:=1 to 1000 do
begin
If Codigo[y] <> 0 Then
Begin
If Codigo[y] = ´0´ then
h := 1
Else
h := 3;
a.x := x; a.y := 0;
b.x := x; b.y := 79;
c.x := x+h-1; c.y := 79;
d.x := x+h-1; d.y := 0;
If i Then
Imagem.Polygon([a,b,c,d]);
i := Not(i);
x := x + h;
End;
end;
end;
Como Usar:
procedure TForm1.Button1Click(Sender: TObject);
begin
CriaCodigo(´03213213241´,Image1.Canvas);
end;
[color=red:eec55ac8c3][b:eec55ac8c3]Código de Barras EAN 13[/b:eec55ac8c3][/color:eec55ac8c3]
unit UnCriaCodBarras;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Printers;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
procedure GeraBarrasEAN13(CodBarras: string; Imagem: TCanvas);
procedure DesenhaBarras(SequenciaHexa: string; Imagem: TCanvas);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses UnCriaCodBarrasImpressao;
{$R *.dfm}
//------------------------------------------------------------------------------
//
// .------------------------------------.
// | | Tabela A | Tabela B | Tabela C |
// |---+----------+----------+----------|
// | 0 | 0001101 | 0100111 | 1110010 |
// | 1 | 0011001 | 0110011 | 1100110 |
// | 2 | 0010011 | 0011011 | 1101100 |
// | 3 | 0111101 | 0011011 | 1000010 |
// | 4 | 0100011 | 0011101 | 1011100 |
// | 5 | 0110001 | 0111001 | 1001110 |
// | 6 | 0101111 | 0000101 | 1010000 |
// | 7 | 0111011 | 0010001 | 1000100 |
// | 8 | 0110111 | 0001001 | 1001000 |
// | 9 | 0001011 | 0010111 | 1110100 |
// .------------------------------------.
// Tabela Auxiliar
// .-----------------------.
// | Algarismo | Seqüência |
// |-----------+-----------|
// | 0 | AAAAAA |
// | 1 | AABABB |
// | 2 | AABBAB |
// | 3 | AABBBA |
// | 4 | ABAABB |
// | 5 | ABBAAB |
// | 6 | ABBBAA |
// | 7 | ABABAB |
// | 8 | ABABBA |
// | 9 | ABBABA |
// .-----------------------.
//
// Gerae código de barras padrão EAN13
procedure TForm1.GeraBarrasEAN13(CodBarras: string; Imagem: TCanvas);
const
TabelaA: array[0..9] of string[7] = (´0001101´, ´0011001´, ´0010011´, ´0111101´, ´0100011´, ´0110001´, ´0101111´, ´0111011´, ´0110111´, ´0001011´);
TabelaB: array[0..9] of string[7] = (´0100111´, ´0110011´, ´0011011´, ´0011011´, ´0011101´, ´0111001´, ´0000101´, ´0010001´, ´0001001´, ´0010111´);
TabelaC: array[0..9] of string[7] = (´1110010´, ´1100110´, ´1101100´, ´1000010´, ´1011100´, ´1001110´, ´1010000´, ´1000100´, ´1001000´, ´1110100´);
TabAux: array[0..9] of string[6] = (´AAAAAA´, ´AABABB´, ´AABBAB´, ´AABBBA´, ´ABAABB´, ´ABBAAB´, ´ABBBAA´, ´ABABAB´, ´ABABBA´, ´ABBABA´);
var
Codigo: string;
Formato: string;
PegaDaTabela: string;
DecimoTerceiroDig: Byte;
Cont: Byte;
begin
Formato := ´´;
Codigo := CodBarras;
DecimoTerceiroDig := StrToIntDef(CodBarras[1], 0);
{----------------------------------------------------------------------------}
{ Tendo o 13º dígito definido, posso definir o padrão de impressão das barras}
{ no primeiro conjunto de 6 dígitos baseado na tabela Auxiliar. }
{----------------------------------------------------------------------------}
PegaDaTabela := TabAux[DecimoTerceiroDig] + ´CCCCCC´;
Formato := Formato + ´101´; //--> Barra Auxiliar de Guarda ´Esquerda´
for Cont := 1 to Length(PegaDaTabela) do
begin
case PegaDaTabela[Cont] of
´A´: Formato := Formato + TabelaA[StrToInt(Codigo[Cont + 1])];
´B´: Formato := Formato + TabelaB[StrToInt(Codigo[Cont + 1])];
´C´: Formato := Formato + TabelaC[StrToInt(Codigo[Cont + 1])];
end;
if Cont = 6 then
Formato := Formato + ´01010´; //--> Barra Auxiliar de Guarda ´Central´
end;
Formato := Formato + ´101´; //--> Barra Auxiliar de Guarda ´Direita´
//------ Desenha o código alfa-numérico na imagem
Imagem.Font.Size := 10;
Imagem.Brush.Color := ClWhite;
Imagem.Pen.Color := ClBlack;
Imagem.TextOut(02, 51, Copy(CodBarras, 01, 01));
Imagem.TextOut(13, 51, Copy(CodBarras, 02, 06));
Imagem.TextOut(60, 51, Copy(CodBarras, 08, 06));
//------ Desenha as barras na imagem
DesenhaBarras(Formato, Imagem);
end;
procedure TForm1.DesenhaBarras(SequenciaHexa: string; Imagem: TCanvas);
var
X, Y, H: LongInt;
A, B, C, D: TPoint;
I: Boolean;
begin
Imagem.Brush.Color := ClWhite;
Imagem.Pen.Color := ClBlack;
x := 10;
i := True;
for y := 1 to Length(SequenciaHexa) do
begin
if SequenciaHexa[y] = ´0´ then
Imagem.Pen.Color := ClWhite
else
Imagem.Pen.Color := ClBlack;
h := 1;
a.x := x;
a.y := 0;
b.x := x;
b.y := 50;
c.x := x + h - 1;
c.y := 50;
d.x := x + h - 1;
d.y := 0;
case Y of
1..3, 46..50, 93..95:
begin
b.y := 55;
c.y := 55;
end;
end;
Imagem.Polygon([A, B, C, D]);
i := not (i);
x := x + h;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GeraBarrasEAN13(´7891089060350´, Image1.Canvas);
end;
Gostei + 0
05/10/2005
Max.jgs
Estas dicas estão presentes do arquivo dtdelphi7.chm que você encontra na internet.
[color=red:7ae63f4c3d][b:7ae63f4c3d]Criar Código de Barras 2x5i[/b:7ae63f4c3d][/color:7ae63f4c3d]
Procedure CriaCodigo(Cod : String; Imagem : TCanvas);
Const
digitos : array[´0´..´9´] of string[5]= (´00110´,
´10001´,
´01001´,
´11000´,
´00101´,
´10100´,
´01100´,
´00011´,
´10010´,
´01010´);
Var
Numero : String;
Cod1 : Array[1..1000] Of Char;
Cod2 : Array[1..1000] Of Char;
Codigo : Array[1..1000] Of Char;
Digito : String;
c1,c2 : Integer;
x,y,z,h : LongInt;
a,b,c,d : TPoint;
I : Boolean;
Begin
Numero := Cod;
For x := 1 to 1000 Do
Begin
Cod1 [x] := 0;
Cod2 [x] := 0;
Codigo[x] := 0;
End;
c1 := 1;
c2 := 1;
x := 1;
For y := 1 to Length(Numero) div 2 do
Begin
Digito := Digitos[Numero[x ]];
For z := 1 to 5 do
Begin
Cod1[c1] := Digito[z];
Inc(c1);
End;
Digito := Digitos[Numero[x+1]];
For z := 1 to 5 do
Begin
Cod2[c2] := Digito[z];
Inc(c2);
End;
Inc(x,2);
End;
y := 5;
Codigo[1] := ´0´;
Codigo[2] := ´0´;
Codigo[3] := ´0´;
Codigo[4] := ´0´; { Inicio do Codigo }
For x := 1 to c1-1 do
begin
Codigo[y] := Cod1[x]; Inc(y);
Codigo[y] := Cod2[x]; Inc(y);
end;
Codigo[y] := ´1´; Inc(y); { Final do Codigo }
Codigo[y] := ´0´; Inc(y);
Codigo[y] := ´0´;
Imagem.Pen .Width := 1;
Imagem.Brush.Color := ClWhite;
Imagem.Pen .Color := ClWhite;
a.x := 1; a.y := 0;
b.x := 1; b.y := 79;
c.x := 2000; c.y := 79;
d.x := 2000; d.y := 0;
Imagem.Polygon([a,b,c,d]);
Imagem.Brush.Color := ClBlack;
Imagem.Pen .Color := ClBlack;
x := 0;
i := True;
for y:=1 to 1000 do
begin
If Codigo[y] <> 0 Then
Begin
If Codigo[y] = ´0´ then
h := 1
Else
h := 3;
a.x := x; a.y := 0;
b.x := x; b.y := 79;
c.x := x+h-1; c.y := 79;
d.x := x+h-1; d.y := 0;
If i Then
Imagem.Polygon([a,b,c,d]);
i := Not(i);
x := x + h;
End;
end;
end;
Como Usar:
procedure TForm1.Button1Click(Sender: TObject);
begin
CriaCodigo(´03213213241´,Image1.Canvas);
end;
[color=red:7ae63f4c3d][b:7ae63f4c3d]Código de Barras EAN 13[/b:7ae63f4c3d][/color:7ae63f4c3d]
unit UnCriaCodBarras;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Printers;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
procedure GeraBarrasEAN13(CodBarras: string; Imagem: TCanvas);
procedure DesenhaBarras(SequenciaHexa: string; Imagem: TCanvas);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses UnCriaCodBarrasImpressao;
{$R *.dfm}
//------------------------------------------------------------------------------
//
// .------------------------------------.
// | | Tabela A | Tabela B | Tabela C |
// |---+----------+----------+----------|
// | 0 | 0001101 | 0100111 | 1110010 |
// | 1 | 0011001 | 0110011 | 1100110 |
// | 2 | 0010011 | 0011011 | 1101100 |
// | 3 | 0111101 | 0011011 | 1000010 |
// | 4 | 0100011 | 0011101 | 1011100 |
// | 5 | 0110001 | 0111001 | 1001110 |
// | 6 | 0101111 | 0000101 | 1010000 |
// | 7 | 0111011 | 0010001 | 1000100 |
// | 8 | 0110111 | 0001001 | 1001000 |
// | 9 | 0001011 | 0010111 | 1110100 |
// .------------------------------------.
// Tabela Auxiliar
// .-----------------------.
// | Algarismo | Seqüência |
// |-----------+-----------|
// | 0 | AAAAAA |
// | 1 | AABABB |
// | 2 | AABBAB |
// | 3 | AABBBA |
// | 4 | ABAABB |
// | 5 | ABBAAB |
// | 6 | ABBBAA |
// | 7 | ABABAB |
// | 8 | ABABBA |
// | 9 | ABBABA |
// .-----------------------.
//
// Gerae código de barras padrão EAN13
procedure TForm1.GeraBarrasEAN13(CodBarras: string; Imagem: TCanvas);
const
TabelaA: array[0..9] of string[7] = (´0001101´, ´0011001´, ´0010011´, ´0111101´, ´0100011´, ´0110001´, ´0101111´, ´0111011´, ´0110111´, ´0001011´);
TabelaB: array[0..9] of string[7] = (´0100111´, ´0110011´, ´0011011´, ´0011011´, ´0011101´, ´0111001´, ´0000101´, ´0010001´, ´0001001´, ´0010111´);
TabelaC: array[0..9] of string[7] = (´1110010´, ´1100110´, ´1101100´, ´1000010´, ´1011100´, ´1001110´, ´1010000´, ´1000100´, ´1001000´, ´1110100´);
TabAux: array[0..9] of string[6] = (´AAAAAA´, ´AABABB´, ´AABBAB´, ´AABBBA´, ´ABAABB´, ´ABBAAB´, ´ABBBAA´, ´ABABAB´, ´ABABBA´, ´ABBABA´);
var
Codigo: string;
Formato: string;
PegaDaTabela: string;
DecimoTerceiroDig: Byte;
Cont: Byte;
begin
Formato := ´´;
Codigo := CodBarras;
DecimoTerceiroDig := StrToIntDef(CodBarras[1], 0);
{----------------------------------------------------------------------------}
{ Tendo o 13º dígito definido, posso definir o padrão de impressão das barras}
{ no primeiro conjunto de 6 dígitos baseado na tabela Auxiliar. }
{----------------------------------------------------------------------------}
PegaDaTabela := TabAux[DecimoTerceiroDig] + ´CCCCCC´;
Formato := Formato + ´101´; //--> Barra Auxiliar de Guarda ´Esquerda´
for Cont := 1 to Length(PegaDaTabela) do
begin
case PegaDaTabela[Cont] of
´A´: Formato := Formato + TabelaA[StrToInt(Codigo[Cont + 1])];
´B´: Formato := Formato + TabelaB[StrToInt(Codigo[Cont + 1])];
´C´: Formato := Formato + TabelaC[StrToInt(Codigo[Cont + 1])];
end;
if Cont = 6 then
Formato := Formato + ´01010´; //--> Barra Auxiliar de Guarda ´Central´
end;
Formato := Formato + ´101´; //--> Barra Auxiliar de Guarda ´Direita´
//------ Desenha o código alfa-numérico na imagem
Imagem.Font.Size := 10;
Imagem.Brush.Color := ClWhite;
Imagem.Pen.Color := ClBlack;
Imagem.TextOut(02, 51, Copy(CodBarras, 01, 01));
Imagem.TextOut(13, 51, Copy(CodBarras, 02, 06));
Imagem.TextOut(60, 51, Copy(CodBarras, 08, 06));
//------ Desenha as barras na imagem
DesenhaBarras(Formato, Imagem);
end;
procedure TForm1.DesenhaBarras(SequenciaHexa: string; Imagem: TCanvas);
var
X, Y, H: LongInt;
A, B, C, D: TPoint;
I: Boolean;
begin
Imagem.Brush.Color := ClWhite;
Imagem.Pen.Color := ClBlack;
x := 10;
i := True;
for y := 1 to Length(SequenciaHexa) do
begin
if SequenciaHexa[y] = ´0´ then
Imagem.Pen.Color := ClWhite
else
Imagem.Pen.Color := ClBlack;
h := 1;
a.x := x;
a.y := 0;
b.x := x;
b.y := 50;
c.x := x + h - 1;
c.y := 50;
d.x := x + h - 1;
d.y := 0;
case Y of
1..3, 46..50, 93..95:
begin
b.y := 55;
c.y := 55;
end;
end;
Imagem.Polygon([A, B, C, D]);
i := not (i);
x := x + h;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GeraBarrasEAN13(´7891089060350´, Image1.Canvas);
end;
Obrigado pela ajuda.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)