QrCode código de barras bidimensional: Delphi

Neste artigo iremos aprender como criar código de barras 2d QRCode .

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.

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

Vamos 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=zn4mIKMH7S4

Veja onde usam o QRCode.

http://www.qrstuff.com/qr_code_examples.html

Qrcode em camisetas.

http://www.messa.com.br/eric/ecode/uploaded_images/qr_tshirt01-715400.jpg

Espero que tenham gostado

Um grande abraço a todos!

Artigos relacionados