Aonde eu encontro comp. Código de Barras para QuickReport 2
Aonde eu encontro componente código de Barras para QuickReport 2?
Max.jgs
Curtidas 0
Respostas
Max.jgs
02/10/2005
Aonde eu encontro componente código de Barras para QuickReport 2?
Alguem pode me ajuadar...
GOSTEI 0
Adriano Santos
02/10/2005
Algumas questões amigo:
[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]
[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
Max.jgs
02/10/2005
[quote:f4d01761e1=´Adriano Santos´]Algumas questões amigo:
[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....
[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
Adriano Santos
02/10/2005
[quote:bff1a202cf=´Adriano Santos´]Algumas questões amigo:
[list:bff1a202cf]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:bff1a202cf]
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
Max.jgs
02/10/2005
[quote:dc6654ca20=´Adriano Santos´]
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
[quote:dc6654ca20=´Adriano Santos´]Algumas questões amigo:
[list:dc6654ca20]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:dc6654ca20]
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
Adriano Santos
02/10/2005
Bom, infelizmente não tenho mais a função pq ficou na outra empresa que eu trabalhava. E componente, como eu te disse, procure no Torry´s Page. Jogue na busca como BarCode ou Bar Code que encontrará componentes com certeza.
GOSTEI 0
Adriano Santos
02/10/2005
Cara encontrei aqui duas funções para geração de código de barras. Uma para o EAN13.
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]
[color=red:eec55ac8c3][b:eec55ac8c3]Código de Barras EAN 13[/b:eec55ac8c3][/color:eec55ac8c3]
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
Max.jgs
02/10/2005
[quote:7ae63f4c3d=´Adriano Santos´]Cara encontrei aqui duas funções para geração de código de barras. Uma para o EAN13.
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]
[color=red:7ae63f4c3d][b:7ae63f4c3d]Código de Barras EAN 13[/b:7ae63f4c3d][/color:7ae63f4c3d]
[/quote:7ae63f4c3d]
Obrigado pela ajuda.
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