Olá! Wednesday, 09 de October de 2024.



Dicas CódigoFonte.net
Sunday, 23 de July de 2006

Código de Barras EAN 13 e EAN 8

Nesse artigo mostrarei como desenhar dois tipos de código de barras EAN 13 e EAN 8, em um PictureBox, não enfocarei nesse artigo a explicação de como construir o algaritimo de desenho do Código de Barra, é necessário um estudo especifico no Padrão EAN para entender como é construído um Código de Barra, estaria disponibilizando as funções necessárias e explicando o processo para a confecção de um aplicativo simples.

Em outro artigo estarei demonstrando como imprimir esse Código de barra usando o componente PrintDocument.

Vamos iniciar uma novo Projeto Windows Forms, coloque um Label altere o Text para Código de Barra, um TextBox, um PictureBox altere a BackColor para Window, um Button altere o Text para Desenhar, seu formulário deve ficar parecido com a Figura 1.

Clique para ver a imagem em seu tamanho real
Figura 1. Como deve ficar os componentes no Formulário

Declare a Função EANCodeBin, ela transforma o Código EAN em Binário essa função é usada pela função PrintEanBarcode, acompanhe a Listagem 1.

Listagem 1. Função EANCodeBIN

function EANCodeBIN(strEANCode: string): string; var I : Integer; str, strAux, StrBinCode, StrCodigo : String; begin strEANCode := Trim(strEANCode); strAux := strEANCode; If (strAux.Length <> 13) And (strAux.Length <> 8) Then Exception.Create('Código EAN Inválido'); for I := 0 to strEANCode.Length - 1 do if (strAux.Chars[I].ToString < '0') or (strAux.Chars[I].ToString > '9') then Exception.Create('Caracter Inválidos no EAN'); If (strAux.Length = 13) Then begin strAux := Copy(strAux,2,Length(StrAux)); Case Convert.ToInt32(Copy(strEANCode,1,1)) of 0: StrCodigo := '000000'; 1: StrCodigo := '001011'; 2: StrCodigo := '001101'; 3: StrCodigo := '001110'; 4: StrCodigo := '010011'; 5: StrCodigo := '011001'; 6: StrCodigo := '011100'; 7: StrCodigo := '010101'; 8: StrCodigo := '010110'; 9: StrCodigo := '011010'; end; end else StrCodigo := '0000'; StrBinCode := '000101'; For I := 1 To (Length(strAux) div 2) do Case Convert.ToInt32(Copy(strAux, I, 1)) of 0: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0001101' else StrBinCode := StrBinCode + '0100111'; end; 1: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0011001' else StrBinCode := StrBinCode + '0110011'; end; 2: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0010011' else StrBinCode := StrBinCode + '0011011'; end; 3: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0111101' else StrBinCode := StrBinCode + '0100001'; end; 4: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0100011' else StrBinCode := StrBinCode + '0011101'; end; 5: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0110001' else StrBinCode := StrBinCode + '0111001'; end; 6: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0101111' else StrBinCode := StrBinCode + '0000101'; end; 7: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0111011' else StrBinCode := StrBinCode + '0010001'; end; 8: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0110111' else StrBinCode := StrBinCode + '0001001'; end; 9: begin if Copy(StrCodigo, I, 1) = '0' then StrBinCode := StrBinCode + '0001011' else StrBinCode := StrBinCode + '0010111'; end; end; StrBinCode := StrBinCode + '01010'; for I := (Length(strAux) div 2 + 1) To Length(strAux) do case Convert.ToInt32(Copy(strAux, I, 1)) of 0 : StrBinCode := StrBinCode + '1110010'; 1 : StrBinCode := StrBinCode + '1100110'; 2 : StrBinCode := StrBinCode + '1101100'; 3 : StrBinCode := StrBinCode + '1000010'; 4 : StrBinCode := StrBinCode + '1011100'; 5 : StrBinCode := StrBinCode + '1001110'; 6 : StrBinCode := StrBinCode + '1010000'; 7 : StrBinCode := StrBinCode + '1000100'; 8 : StrBinCode := StrBinCode + '1001000'; 9 : StrBinCode := StrBinCode + '1110100'; end; StrBinCode := StrBinCode + '101000'; EANCodeBIN := StrBinCode; end;

Agora vamos a declarar a função PrintEANBarCode, é necessário passar os seguintes parâmetros, o Código de Barra e o Objeto PictureBox aonde será desenhado as Brras do Código de Barra, os outros parâmetros são opcionais, os quatro parâmetros seguintes são as posições e tamanho do desenho e o ultimo é a fonte da linha que imprimirá o código de barra, acompanhe a Listagem 2.

Listagem 2. Função PrintEANCode

procedure PrintEANBarCode(strEANCode : String; objPicBox : PictureBox; const sngX1 : Single = -1; const sngY1 : Single = -1; const sngX2 : Single = -1; const sngY2 : Single = -1; const FontForText: Font = nil); var I : Integer; sngPosX : Single; sngPosY : Single; sngScaleX : Single; strEANBin : String; strFormat : StringFormat; FontText : Font; sngXX1, sngYY1, sngXX2, sngYY2 : Single; BrushX : Brush; begin StrFormat := StringFormat.Create; strEANBin := EANCodeBIN(strEANCode); If (FontForText = nil) Then FontText := Font.Create('Courier New', 10) else FontText := FontForText; If sngX1 = (-1) Then sngXX1 := 0 else sngXX1 := sngX1; If sngY1 = (-1) Then sngYY1 := 0 else sngYY1 := sngY1; If sngX2 = (-1) Then sngXX2 := objPicBox.Width else sngXX2 := sngX2; If sngY2 = (-1) Then sngYY2 := objPicBox.Height else sngYY2 := sngY2; sngPosX := sngXX1; sngPosY := sngYY2 - (1.5 * FontText.Height); BrushX := SolidBrush.Create(objPicBox.BackColor); objPicBox.CreateGraphics.FillRectangle(BrushX, sngXX1, sngYY1, sngXX2 - sngXX1, sngYY2 - sngYY1); sngScaleX := (sngXX2 - sngXX1) / strEANBin.Length; for I := 1 To Length(strEANBin) do begin If Copy(strEANBin, I, 1) = '1' Then begin BrushX := SolidBrush.Create(objPicBox.ForeColor); objPicBox.CreateGraphics.FillRectangle(BrushX, sngPosX, sngYY1, sngScaleX, sngPosY); end; sngPosX := sngXX1 + (I * sngScaleX); end; strFormat.Alignment := StringAlignment.Center; strFormat.FormatFlags := StringFormatFlags.NoWrap; BrushX := SolidBrush.Create(objPicBox.ForeColor); objPicBox.CreateGraphics.DrawString(strEANCode, FontText, BrushX, Convert.ToSingle((sngXX2 - sngXX1) / 2), Convert.ToSingle(sngYY2 - FontText.Height), strFormat); end;

No evento Click do Button1 coloque o seguinte código para executar a Função de desenhar as barras do código de barra, Listagem 3.

Listagem 3. Executando a Função para Desenhar Barra

PrintEANBarCode(TextBox1.Text, PictureBox1, 10, 10, PictureBox1.Width - 20, PictureBox1.Height - 20);

Não esqueça de colocar no uses SysUtils, agora basta você digitar um Código de Barra e clicar em desenhar que ele desenhará as barras no PictureBox veja a Figura 2 e Figura 3.

Clique para ver a imagem em seu tamanho real
Figura 2. Código de Barra EAN 13

Clique para ver a imagem em seu tamanho real
Figura 3. Código de Barra EAN 8

Abraços a Todos.


Conheça nosso parceiro:





Comentários do artigo [Novo comentário]

carlos escudeiro - 11 de October de 2008 - 17:46
Só faltou o codigo do botão desenhar
Edilson Alves de Oliveira - 18 de November de 2008 - 17:23
onde encontro esse tal de pictueBox no delphi?
ELIAS PAULINO - 26 de October de 2009 - 12:59
tambem gostaria de saber onde eu encontro esse componente picturebox no delphi 7 , utilizo o quickreport 4.5
Everton Eberhardt - 24 de April de 2011 - 12:54
Não funciona?
o código do botão desenhar gera um erro!
Vicente Miras - 27 de May de 2011 - 11:06
Bom Dia,
Sei que já foi perguntado abaixo, mas não encontrei a resposta, gostaria de saber onde encontro o componente PictureBox, no Delphi 7 não tem.
antonio celio - 05 de June de 2016 - 19:01
muito bom
Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:


CodigoFonte.net » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010