Fórum Aonde eu encontro comp. Código de Barras para QuickReport 2 #298070

02/10/2005

0

Aonde eu encontro componente código de Barras para QuickReport 2?


Max.jgs

Max.jgs

Responder

Posts

05/10/2005

Max.jgs

Aonde eu encontro componente código de Barras para QuickReport 2?


Alguem pode me ajuadar...


Responder

Gostei + 0

05/10/2005

Adriano Santos

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]


Responder

Gostei + 0

05/10/2005

Max.jgs

[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....


Responder

Gostei + 0

05/10/2005

Adriano Santos

[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.


Responder

Gostei + 0

05/10/2005

Max.jgs

[quote:dc6654ca20=´Adriano Santos´]
[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


Responder

Gostei + 0

05/10/2005

Adriano Santos

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.


Responder

Gostei + 0

05/10/2005

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: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;



Responder

Gostei + 0

05/10/2005

Max.jgs

[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]

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;
[/quote:7ae63f4c3d]



Obrigado pela ajuda.


Responder

Gostei + 0

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

Aceitar