Sample code for 30+ languages & platforms
Lazarus Pascal Requires Chilkat v11.7.0+

QR Code Numeric, Alphanumeric and Byte Modes

See more QR Code Examples

Demonstrates the QR encoding modes. Digits alone are stored in numeric mode, and text made only of digits, upper-case letters, space and $ % * + - . / : in alphanumeric mode. Both pack more characters into a symbol than byte mode, which is used for everything else. QrCode chooses the most compact mode the text allows, and the response reports it. A product code written in upper case therefore gives a smaller symbol than the same code in lower case.

Chilkat Lazarus Pascal Downloads

Lazarus Pascal
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Formats,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  fmt: TFormats;
  json: TJsonObject;
  jsonOut: TJsonObject;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  fmt := TFormats.Create;
  json := TJsonObject.Create;
  jsonOut := TJsonObject.Create;

  //  Digits only.
  json.UpdateString('payload.text','00123456789012345678');
  success := fmt.QrCode('generate',json,jsonOut);
  if (success = False) then
    begin
      WriteLn(fmt.LastErrorText);
      Exit;
    end;
  WriteLn('digits: mode ' + jsonOut.StringOf('symbols[0].selectedEncoding.mode') + ', version ' + jsonOut.IntOf('symbols[0].selectedEncoding.version'));

  //  Upper-case letters, digits, space and - are all in the alphanumeric set.
  json.UpdateString('payload.text','ORDER-12345 LOT A7 SHELF 12-C');
  success := fmt.QrCode('generate',json,jsonOut);
  if (success = False) then
    begin
      WriteLn(fmt.LastErrorText);
      Exit;
    end;
  WriteLn('upper case: mode ' + jsonOut.StringOf('symbols[0].selectedEncoding.mode') + ', version ' + jsonOut.IntOf('symbols[0].selectedEncoding.version'));

  //  Lower-case letters are not, so the same text in lower case needs byte mode.
  json.UpdateString('payload.text','order-12345 lot a7 shelf 12-c');
  success := fmt.QrCode('generate',json,jsonOut);
  if (success = False) then
    begin
      WriteLn(fmt.LastErrorText);
      Exit;
    end;
  WriteLn('lower case: mode ' + jsonOut.StringOf('symbols[0].selectedEncoding.mode') + ', version ' + jsonOut.IntOf('symbols[0].selectedEncoding.version'));

  //  The mode can be named.  Byte mode can hold any text.  Naming a mode the text cannot use
  //  (numeric for text with letters, for example) fails with conflictingOptions.
  json.UpdateString('payload.text','00123456789012345678');
  json.UpdateString('encoding.qr.mode','byte');
  success := fmt.QrCode('generate',json,jsonOut);
  if (success = False) then
    begin
      WriteLn(fmt.LastErrorText);
      Exit;
    end;
  WriteLn('digits as bytes: mode ' + jsonOut.StringOf('symbols[0].selectedEncoding.mode') + ', version ' + jsonOut.IntOf('symbols[0].selectedEncoding.version'));

  //  The four symbols, in the order they were made:

  //  image

  //  Sample output:

  //  digits: mode numeric, version 1
  //  upper case: mode alphanumeric, version 2
  //  lower case: mode byte, version 3
  //  digits as bytes: mode byte, version 2


  fmt.Free;
  json.Free;
  jsonOut.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.