QrCode código de barras bidimensional: Delphi
Neste artigo iremos aprender como criar código de barras 2d QRCode .
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
Neste artigo iremos aprender como criar código de barras 2d QRCode
O QR Code é uma tecnologia que poucas pessoas no Brasil conhecem, é um código de barras 2D que está sendo cada vez mais utilizado em anúncios publicitários, videoclipes e uma série de outras situações.
Ficou curioso para saber como funciona? Então confira este artigo.
Trata-se de um código de barras 2D capaz de armazenar até 4.296 caracteres alfanuméricos de texto.
Códigos QR pode ser lido por um dispositivo que vão desde leitores de código QR e para qualquer celular que permite ao usuário apontar a câmera para uma figura.
O mais legal é que você mesmo pode criar um QR Code !
Então vamos nessa, crie um novo projeto Delphi VCL e iremos adicionar um TImage, TMemo, TButton, 2 TMaskEdit, TComboBox e 3 TLabel, , abaixo temos o layout do formulário.

Figura 1. Layout do Formulário.
Mudando as propriedades dos componentes no projeto.
- Image1: Height e Width mude para 321
- Memo1: Lines mude para digite aqui sua mensagem
- EditMask1: EditMask mude para !999;1;
- EditMask2: EditMask mude para !999;1;
- EditMask1: Text mude para 300
- EditMask2: Text mude para 300
- ComboBox1: Text mude para L - [padrão] Permite a recuperação de até 7% de perda de dados
- ComboBox1: Items Adicione - L - [padrão] Permite a recuperação de até 7% de perda de dados
- ComboBox1: Items Adicione - M - Permite a recuperação de até 15% de perda de dados
- ComboBox1: Items Adicione - Q - Permite a recuperação de até 25% de perda de dados
- ComboBox1: Items Adicione - H - Permite a recuperação de até 30% a perda de dados
- ComboBox1: Style mude para csDropDownList
- ComboBox1: ItemIndex mude para 0
- Button1: Caption mude para Gerar Etiqueta
Codificando o projeto, incluir 3 classes no uses PngImage, HTTPApp, WinInet, procedure WinInet_HttpGet, procedure GetQrCode, constante UrlGoogleQrCode e uma variável enumerada na sessão Type com o nome TQrImage_ErrCorrLevel.
Observação: variável enumerada é um tipo de variável pré-definida criada na sessão Type Exemplo:
Type TDiaSemana = (segunda, terça-feira, domingo);
Assim que definir um tipo de dados enumerado, podemos declarar variáveis para ser desse tipo:
var algumdia: TDiaSemana;
O objetivo principal de um tipo de dados enumerado é deixar claro quais dados o programa irá manipular. Um tipo enumerado é realmente apenas uma maneira abreviada de atribuição de valores seqüenciais a constantes. Dadas estas declarações, terça-feira é uma constante do tipo TDiaSemana .
Listagem 1.Ficando assim nosso código até o momento!
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Memo1: TMemo;
Button1: TButton;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
PngImage,
HTTPApp,
WinInet;
{$R *.dfm}
type
TQrImage_ErrCorrLevel = (L, M, Q, H);
const
UrlGoogleQrCode =
'http://chart.apis.google.com/chart?chs=%dx%d&cht=qr&chld=%s&chl=%s';
QrImgCorrStr: array [TQrImage_ErrCorrLevel] of string = ('L', 'M', 'Q', 'H');
procedure WinInet_HttpGet(const Url: string; Stream: TStream);
const
BuffSize = 1024 * 1024;
var
hInter: HINTERNET;
UrlHandle: HINTERNET;
BytesRead: DWORD;
Buffer: Pointer;
begin
hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hInter) then
begin
Stream.Seek(0, 0);
GetMem(Buffer, BuffSize);
try
UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0,
INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then
begin
repeat
InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead);
if BytesRead > 0 then
Stream.WriteBuffer(Buffer^, BytesRead);
until BytesRead = 0;
InternetCloseHandle(UrlHandle);
end;
finally
FreeMem(Buffer);
end;
InternetCloseHandle(hInter);
end
end;
procedure GetQrCode(Width, Height: Word;
Correction_Level: TQrImage_ErrCorrLevel; const Data: string;
StreamImage: TMemoryStream);
Var
EncodedURL: string;
begin
EncodedURL := Format(UrlGoogleQrCode,
[Width, Height, QrImgCorrStr[Correction_Level], HTTPEncode(Data)]);
WinInet_HttpGet(EncodedURL, StreamImage);
end;
end.
Listagem 2. No Evento OnClick do Button1 implemente o código abaixo:
procedure TForm1.Button1Click(Sender: TObject);
var
ImageStream: TMemoryStream;
PngImage: TPngImage;
begin
Image1.Picture := nil;
ImageStream := TMemoryStream.Create;
PngImage := TPngImage.Create;
try
try
GetQrCode(StrToInt(Trim(MaskEdit1.Text)), StrToInt(Trim(MaskEdit2.Text)),
TQrImage_ErrCorrLevel(ComboBox1.ItemIndex), Memo1.Lines.Text,
ImageStream);
if ImageStream.Size > 0 then
begin
ImageStream.Position := 0;
PngImage.LoadFromStream(ImageStream);
Image1.Picture.Assign(PngImage);
end;
except
on E: exception do
ShowMessage(E.Message);
end;
finally
ImageStream.Free;
PngImage.Free;
end;
Listagem 3. No Evento OnCreate do Form1 implemente o código abaixo:
Button1Click(Sender);
Neste momento se você executar o projeto vai ter o seguinte resultado:

Figura 2. Exemplo Completo
Considerações finais:
Podendo criar uma rotina para impressão da etiqueta.
Para decifrar o códigos é necessário de um aplicativo instalado em seu celular segue o site do aplicativo:
http://i-nigma.com/i-nigmahp.htmlVamos ver imagens e vídeos como são usados o QRCode.
Programa de TV francês: caça ao tesouro com QR Code .
http://www.youtube.com/watch?v=zn4mIKMH7S4Veja onde usam o QRCode.
http://www.qrstuff.com/qr_code_examples.htmlQrcode em camisetas.
http://www.messa.com.br/eric/ecode/uploaded_images/qr_tshirt01-715400.jpgEspero que tenham gostado
Um grande abraço a todos!
Savério Vertoni Jr.
Gosto de todas as linguagens de programação mais tem uma em especial o PASCAL;)__________ ;) saveriovertoni.wordpress.com saverio.vertoni@hotmail.com
13 COMENTÁRIOS
obrigado e um Forte abraço!
Forte Abraço
Savério Vertoni Jr. teria como ao invés de pngimage ser jpg e depois gravar no banco de dados.
abraços
Vc tem alguma novidade sobre aquele exemplo pngimage ser jpg e depois gravar no banco de dados.
Forte abraço
http://www.han-soft.com/barcode2d.php
Sérgio Guedes
Abraços
Gostaria de saber se você não tem interesse em publicar um artigo sobre este material, o que você acha?
Gostaria de me enviar um e-mail para falarmos sobre o mesmo? Segue meu e-mail yamazack at gmail com
Um abraço.
Try
GetQrCode(StrToInt(Trim(MaskEdit1.Text)), StrToInt(Trim(MaskEdit2.Text)),
Como eu não possuo muito conhecimento em Delphi não consegui corrigir, você poderia dar uma ajuda?
Obrigado
Eu acabei de baixar aqui e rodei no XE2 sem problemas.

código fonte

