Peguem a Rotina que Gera o Código de Barras
Em nome do conhecimento, eu largo este fonte que eu achei na net, derrubando o convenconismo barato, o individualismo e o LAMMERISMO :x de certos usuários do fórum que ficam se achando só pq tem uma rotina bem simples... :twisted: :twisted: :twisted:
Aí vai pessoal
Matéria:
Desenvolvi esta rotina em uma epoca em que era muito dificil achar um componente para codigo de barras 2x5i, e os que eu achei na net nao faziam os codigos do tamanho requerido pela FEBRABAN.
a procedure abaixo desenva em um canvas o codigo relativo ao valor passado.
No evento beforeprint da band do Quick report para gerar o codigo de barras que será impresso em boletos bancarios.
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;
E VÃO À M-E-R-D-A SEUS ANALISTAS AMADORES E ANTI PROFISIONAIS ! DEÊM LUGAR ÀS PESSOAS QUE QUEREM CRESCER [b:f73c1bd35c]PESSOALMENTE[/b:f73c1bd35c] E PROFISSIONALMENTE ! :x :x :x
ENJOY !
JULIEN MURRAY
Aí vai pessoal
Matéria:
Desenvolvi esta rotina em uma epoca em que era muito dificil achar um componente para codigo de barras 2x5i, e os que eu achei na net nao faziam os codigos do tamanho requerido pela FEBRABAN.
a procedure abaixo desenva em um canvas o codigo relativo ao valor passado.
No evento beforeprint da band do Quick report para gerar o codigo de barras que será impresso em boletos bancarios.
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;
E VÃO À M-E-R-D-A SEUS ANALISTAS AMADORES E ANTI PROFISIONAIS ! DEÊM LUGAR ÀS PESSOAS QUE QUEREM CRESCER [b:f73c1bd35c]PESSOALMENTE[/b:f73c1bd35c] E PROFISSIONALMENTE ! :x :x :x
ENJOY !
JULIEN MURRAY
Julienmurray
Curtidas 0
Melhor post
Jaques Junior
26/06/2019
Escrevi essa rotina em 1993 em Turbo Pascal, por volta de 1998 passei para Delphi, achei que nunca mais iria precisar dela, hoje, em pleno 2019, depois de procura-la igual louco em meus diversos HD's de backup, resolvo procurar na internet e acho a rotina escrita por mim. Tópico de 2003! (Troféu pá de outro para mim) KKKKK
GOSTEI 1
Mais Respostas
Julienmurray
08/04/2003
Ah, me esqueci dos programadores LAMMERS que COPIAM (até aí tudo, até eu faço isso de vez em quando, quem naum faz ?!?) o fonte, compilam e depois Assinam em Baixo. COMPRE POR APENAS R$ 50,00 !
Pô LAMMERS, além de se acharem ´Expertos´, ainda dão uma de malandros. Vão dar de malandros em cima de seu irmãozinho mais novo que ainda é errado fazer isso.
Pô LAMMERS, além de se acharem ´Expertos´, ainda dão uma de malandros. Vão dar de malandros em cima de seu irmãozinho mais novo que ainda é errado fazer isso.
GOSTEI 0
Julienmurray
08/04/2003
VCs vaum gostar !
GOSTEI 0
Julienmurray
08/04/2003
:twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted:
:shock: :shock: :shock: :shock: :shock: :shock:
:shock: :shock: :shock: :shock: :shock: :shock:
GOSTEI 0
Eniorm
08/04/2003
Valeu pela rotina e... [b:d1b0a49b3d]UP THE IRONS![/b:d1b0a49b3d]
haha, eu tbm sou da elite Maidenmaniaca!
Fui...
haha, eu tbm sou da elite Maidenmaniaca!
Fui...
GOSTEI 0
Julienmurray
08/04/2003
VAMO LÁ PESSOAL, NÃO É TODO DIA QUE ACONTECE ISSO ! APROVEITEM !....
GOSTEI 0
Hhhhhh
08/04/2003
adaptar esse código para outros padrões de código de barra é muito complicado????
GOSTEI 0
Julienmurray
08/04/2003
Vou ser bem franco contigo;
:D Não testei ainda ! :D
huahuahuahuahauhaua :D
Se vc Conseguir, imensamente agradecido.....
Julien ´Murray´
:D Não testei ainda ! :D
huahuahuahuahauhaua :D
Se vc Conseguir, imensamente agradecido.....
Julien ´Murray´
GOSTEI 0
Julienmurray
08/04/2003
:shock:
GOSTEI 0
Julienmurray
08/04/2003
Peguem a rotina, aproveitem
Iron Maiden´s get you !
:twisted: Julien ´Murray´ :twisted:
Iron Maiden´s get you !
:twisted: Julien ´Murray´ :twisted:
GOSTEI 0
Anonymous
08/04/2003
adaptar esse código para outros padrões de código de barra é muito complicado????
[b:a90056d55f]Barcode Component v.1.15 FWS 17 Kb 4 Oct 1999 [/b:a90056d55f]
By Andreas Schmidt. A Free Barcode Component. Works with Code_2_5_industrial, Code_2_5_matrix, Code39, Code39Extended, Code128A, Code128B, Code128C, Code93, Code93Extended, MSI, PostNet, Codabar, EAN8, EAN13.
Fully functional
[b:a90056d55f]Source: Included[/b:a90056d55f]
http://www.torry.net/barcodes.htm
GOSTEI 0
Julienmurray
08/04/2003
[quote:ed07274546=´LucasCastro´]adaptar esse código para outros padrões de código de barra é muito complicado????
[b:ed07274546]Barcode Component v.1.15 FWS 17 Kb 4 Oct 1999 [/b:ed07274546]
By Andreas Schmidt. A Free Barcode Component. Works with Code_2_5_industrial, Code_2_5_matrix, Code39, Code39Extended, Code128A, Code128B, Code128C, Code93, Code93Extended, MSI, PostNet, Codabar, EAN8, EAN13.
Fully functional
[b:ed07274546]Source: Included[/b:ed07274546]
http://www.torry.net/barcodes.htm[/quote:ed07274546]
Valeu amigão, Pessoal, este deve funcionar também !
:twisted: Julien ´Murray´ :twisted:
GOSTEI 0
Julienmurray
08/04/2003
(Olhem minha dúvida por favor.... se quiserem é claro!)
Olha, posso parecer até um chato postando toda hora esta mensagem, mas pense, quem iria compartilhar um conhecimento tão importante que nem esse?
Eu fiz outra experiência(quem conhece, já sabe) e deu certo também.
Entrem em www.netfontes.com.br e procure no menu à esquerda a opção busca fonte, digite a palavra [b:7b0784f6ce]Código[/b:7b0784f6ce] e clique em [b:7b0784f6ce]Buscar[/b:7b0784f6ce].
Virá como resultado duas fontes, sendo que uma delas é a fonte do código de barras ! Dê um clique e baixe a fonte para seu computador.
Depois de instalada a fonte faça isso:
Como sabe-se de que o código de barra é reconhecido pelo sistema como n°( se for também letra, me avisem ! Obrigado !), o que se faz:
Na hora de Cadastrar um produto no sistema, registre o n° do Código de Barras, uma maneira que eu acho eficiente, e fazer uma rotina de n° aleatórios com um ´[b:7b0784f6ce]For[/b:7b0784f6ce]zinho´ .
Depois de cadastrados os n°, pronto, seu leitor de código de barras irá ler aquele código e ira procurar no banco o n°.
Mas infelizmente vai dar ERRO !
Na hora de vc fazer a rotina que gera o n°, não se esqueça de colocar um asterisco em cada ponta, para que não de erro (não sei porquê, alguém sabe?)
E depois eu venho com uma dúvida bem simples:
COMO SABE-SE DE QUE O LEITOR RECONHECE CARACTERES, COMO EU FAÇO A ROTINA DE PASSA AQUILO QUE LEU PARA UM LABEL, POR EXEMPLO?
OBRIGADO !
:twisted: Julien ´Murray´ :twisted:
Olha, posso parecer até um chato postando toda hora esta mensagem, mas pense, quem iria compartilhar um conhecimento tão importante que nem esse?
Eu fiz outra experiência(quem conhece, já sabe) e deu certo também.
Entrem em www.netfontes.com.br e procure no menu à esquerda a opção busca fonte, digite a palavra [b:7b0784f6ce]Código[/b:7b0784f6ce] e clique em [b:7b0784f6ce]Buscar[/b:7b0784f6ce].
Virá como resultado duas fontes, sendo que uma delas é a fonte do código de barras ! Dê um clique e baixe a fonte para seu computador.
Depois de instalada a fonte faça isso:
Como sabe-se de que o código de barra é reconhecido pelo sistema como n°( se for também letra, me avisem ! Obrigado !), o que se faz:
Na hora de Cadastrar um produto no sistema, registre o n° do Código de Barras, uma maneira que eu acho eficiente, e fazer uma rotina de n° aleatórios com um ´[b:7b0784f6ce]For[/b:7b0784f6ce]zinho´ .
Depois de cadastrados os n°, pronto, seu leitor de código de barras irá ler aquele código e ira procurar no banco o n°.
Mas infelizmente vai dar ERRO !
Na hora de vc fazer a rotina que gera o n°, não se esqueça de colocar um asterisco em cada ponta, para que não de erro (não sei porquê, alguém sabe?)
E depois eu venho com uma dúvida bem simples:
COMO SABE-SE DE QUE O LEITOR RECONHECE CARACTERES, COMO EU FAÇO A ROTINA DE PASSA AQUILO QUE LEU PARA UM LABEL, POR EXEMPLO?
OBRIGADO !
:twisted: Julien ´Murray´ :twisted:
GOSTEI 0
Anonymous
08/04/2003
Padrão code39
Os asteriscos são identificadores de início e fim do padrão 3e9.
Os asteriscos são identificadores de início e fim do padrão 3e9.
GOSTEI 0
Julienmurray
08/04/2003
:twisted:
GOSTEI 0