Работа с QR-кодами

d{ "title": "QR-коды: возникновение, эволюция и современное применение в Delphi-проектах", "keywords": "QR-код история разработка, QR-коды Delphi, генерация QR кода, сканирование QR, библиотеки QR Delphi, история QR-кода", "description": "Подробный разбор истории QR-кодов: от изобретения для автопрома до глобального стандарта. Инструкции по интеграции QR-функций в Delphi: готовые библиотеки, алгоритмы создания и распознавания. Практические примеры кода.", "html_content": "

Проблема: недостаток понимания, как и почему QR-коды стали стандартом, и непонимание путей их интеграции в старые проекты

Разработчики часто сталкиваются с ситуацией, когда требуется добавить поддержку QR-кодов в существующее ПО на Delphi, но отсутствует чёткое представление о том, с чего начать и какие библиотеки выбрать. Многие считают, что QR-код — это некий «готовый чёрный ящик», но не понимают его происхождения и внутреннего устройства, из-за чего совершают ошибки при выборе инструментов.

При попытке сэкономить время разработчики берут первую попавшуюся библиотеку, которая оказывается устаревшей, неподдерживаемой или содержит скрытые лицензионные ограничения. В результате проект либо не компилируется под целевую платформу, либо генерирует некорректные коды, не читаемые реальными сканерами.

Также распространена ситуация, когда заказчик просит «просто сделать QR-код для ссылки», но затем требует исправить дизайн, добавить логотип, повысить помехоустойчивость, и разработчик не может объяснить, какие уровни коррекции ошибок существуют и какой выбрать под задачу.

", "

Причины: от истоков — как изобретение для автомобильных заводов определило сегодняшние стандарты

QR-код (Quick Response) был создан в 1994 году японской компанией Denso Wave, входившей в корпорацию Toyota. Задача была практическая: необходимо было быстро считывать информацию о деталях на конвейере, где традиционные штрихкоды уже не справлялись — они читались медленно и не могли содержать достаточный объём данных.

Инженер Масахиро Хара (Masahiro Hara) и его команда разработали двумерный код, способный кодировать до 7089 цифровых символов или до 4296 букв при высокой скорости распознавания. Ключевое решение — размещение трёх «глазков» в углах, позволяющее детектировать код при любом угле поворота. Denso Wave сознательно отказалась от патентной защиты в 1999 году, сделав код свободным для использования.

С тех пор QR-код прошёл путь от производственного инструмента до глобального стандарта ISO/IEC 18004. Сейчас он применяется для оплаты, опросов, рекламы, логистики, цифровых пропусков и даже для криптовалютных транзакций. Это означает, что добавление QR в Delphi-проект сегодня — не опция, а требование рынка, особенно в системах складского учёта, CRM и маркировки товаров.

", "

Решение: пошаговый план интеграции QR-кодов в Delphi (анализ, выбор библиотеки, реализация)

Ниже представлен детальный рабочий план, который подходит как для новых проектов, так и для модернизации старых, написанных ещё на Delphi 7. Шаги расположены в строгой последовательности — не пропускайте ни один из них.

Шаг 1. Определите тип операции — генерация или распознавание

Для генерации QR-кода (создание изображения из строки) вам потребуется одна группа библиотек. Для распознавания (декодирование QR с картинки или с веб-камеры) — другая. Наиболее устойчивый выбор — библиотека DelphiZXingQRCode (порт ZXing) для генерации и компонент TVideoCapture или TCam для захвата видео совместно с ZXing.Delphi для декодирования.

", "

Шаг 2. Установка и настройка библиотеки DelphiZXingQRCode

Скачайте актуальную версию с официального репозитория GitHub (ветка для Delphi). Добавьте файл DelphiZXingQRCode.pas в ваш проект. Следующий пример создаёт QR-код с содержимым 'Hello World':

uses DelphiZXingQRCode;
var
QRCode: TDelphiZXingQRCode;
Bitmap: TBitmap;
begin
QRCode := TDelphiZXingQRCode.Create;
try
QRCode.Data := 'https://example.com';
QRCode.Encoding := qrAuto;
QRCode.QuietZone := 4;
Bitmap := QRCode.GenerateImage(5);
Image1.Picture.Bitmap := Bitmap;
finally
QRCode.Free;
end;
end;

Параметр GenerateImage(5) задаёт масштаб одного модуля в пикселях. Уровень коррекции по умолчанию — L (7%), но его можно изменить свойством ErrorCorrection. Для логотипов оставляйте уровень не ниже M (15%).

", "

Шаг 3. Распознавание QR-кода с помощью видеокамеры (ZXing.Delphi + DirectShow)

Для декодирования с веб-камеры используйте ZXing.Delphi (скачать с официального репозитория). Потребуется компонент VFW (Video for Windows) или DirectShow.

  1. Загрузите ZXing.Delphi.pas и ZXing.ReadResult.pas.
  2. Создайте таймер для анализа текущего кадра (частотой 200-300 мс):
  3. Используйте код: ReadResult := TScanManager.ScanBitmap(Bitmap);
  4. ReadResult — запись, содержащая поля Text, Points и Format.
  5. Выводите результат в TEdit: Edit1.Text := ReadResult.Text.

Важный нюанс: ZXing.Delphi работает с 24-битными битмапами. Если используется 8-битное или 32-битное изображение, выполните конвертацию через TBitmap.PixelFormat := pf24bit.

", "

Шаг 4. Выбор уровня коррекции ошибок под конкретную задачу

В стандарте ISO/IEC 18004 определено 4 уровня коррекции. Вот точные характеристики:

", "

Результат: стабильная работа QR-функционала в любом Delphi-проекте, совместимость с современными сканерами

После внедрения описанного подхода ваш проект получает критические преимущества:

Дополнительно вы можете легко добавить функционал генерации QR-парсеров для собственных маркировок, привязки к базам данных и прочих тонких настроек, не отходя от стандарта.

", "

Заключение: почему знание истории и стандарта — залог успешной интеграции

QR-код перестал быть просто «квадратиком со штрихами». Это полноценный протокол передачи данных, развитие которого продолжается. В 2026 году ожидается расширение цветовых кодов и внедрение новых методов коррекции для гибких носителей — если вы уже работаете с QR сегодня, ваша кодовая база останется совместимой завтра.

Начните с малого: скопируйте пример генерации из этой статьи в свой проект, замените строку на свои данные, напечатайте код и отсканируйте телефоном. Когда вы увидите, что все работает «из коробки», вы сможете двигаться дальше — к кастомным логотипам, автоматической выгрузке в Excel и интеграции с облачными API.

Источники, которые стоит изучить: официальная документация ZXing на GitHub (раздел для Delphi), спецификация ISO/IEC 18004:2015, а также архив патентов Denso Wave.

" }

Добавлено: 27.04.2026