Usando o Google Chart Tools / Image Charts (também conhecido como Chart API), pode-se facilmente gerar QR codes, imagens que são tipos especiais de códigos de barras bi-dimensionais, também conhecidos como "hardlinks".
Os QR Codes armazenam até 4.296 caracteres alfanuméricos de um texto qualquer. Podem ser lidos por dispositivos ópticos com um software apropriado. Estes dispositivos vão desde Leitores Dedicados de QR Codes à telefones celulares.
No Delphi, tudo o que precisamos para gerar um QRCode é fazer uma requisição pelo método GET à seguinte URL:
http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=M&chl=Active+Delphi
E a resposta a esta requisição será uma imagem (por padrão, PNG, mas pode-se mudar o formato para GIF, adicionando o parâmetro como "chof=gif" na url).
Você pode encontrar mais informações sobre os parâmetros para gerar QR Codes usando o Google Chart API na página do projeto.
Importante: Caso seja necessário codificar mais de 2.000 caracteres, será necessário fazer uma requisição via método POST.
Finalmente, o código fonte em Delphi para criar um Qr Code. Não há muito comentário devido a sua simplicidade:
uses
PngImage,
HTTPApp,
WinInet;
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;
//Esta função retorna um Stream (PNG dentro) com um Qr code.
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;
Clique aqui para fazer o download do exemplo. (639 KB - Delphi 2010 ou superior)

Por: Kelver Merlotti - Coordenador Editorial
Contato: kelver@activedelphi.com.br
Fonte: http://theroadtodelphi.wordpress.com
|