Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с USB-сканером в Delphi XE8: корректный ввод данных в FMX-проектах

Delphi , ОС и Железо , Сканер

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

Описание проблемы

При попытке ввода данных в компоненты TEdit или TMemo с USB-сканера в FMX-проектах в Delphi XE8, данные не корректно обрабатываются. При просмотре события KeyDown видно, что ключи 16/17/18 присутствуют, но KeyChar всегда равен #0. В VCL-проектах все работает корректно, но в FMX-проектах scanner не распознается.

Причина проблемы

Проблема заключается в том, что FMX не обрабатывает сообщение WM_CHAR, которое отправляет USB-сканер для фактического ключа. В результате, данные не корректно вводятся в компоненты.

Решения проблемы

  1. Изменение настроек сканера

Если ваш сканер поддерживает настройку задержки между нажатиями клавиш, попробуйте увеличить задержку. Также проверьте настройки Caps Lock на сканере. В некоторых случаях, определенные настройки (например, Alt+Keypad) могут вызывать проблемы с вводом данных в FMX-проектах.

Пример настроек Caps Lock: - Auto - Alt+Keypad - Caps Lock Off - Caps Lock On

Попробуйте изменить настройки Caps Lock на Auto, Off или On, чтобы проверить, решит ли это проблему.

  1. Использование альтернативного USB-сканера

Попробуйте использовать другой USB-сканер (ключборд), который работает как обычная клавиатура. В этом случае, скорее всего, не будет проблем с вводом данных в FMX-проектах.

  1. Изменение кода FMX.Platform.Win

Если предыдущие решения не помогли, можно изменить код в файле FMX.Platform.Win. Найдите процедуру CurrentChar и закомментируйте строку, которая проверяет и устанавливает Key в 0, если не нажаты клавиши Alt, Ctrl или Command. После этого, скопируйте папку FMX в свой собственный каталог исходных файлов и соберите проект из этого каталога.

Пример кода для изменения:

pascal procedure CurrentChar(Msg: tagMsg; var Key: Word; var Ch: WideChar; var Shift: TShiftState); begin Key := wParam; Ch := WideChar(Msg.wParam); Shift := KeyDataToShiftState(lParam); if (Ch >= ' ') then begin if ((Shift * [ssAlt, ssCtrl]) = [ssAlt, ssCtrl]) then begin // AltGr + Char (in German keyboard) Shift := Shift - [ssAlt, ssCtrl]; end; //WHYYYY?!?!?!?!?!?!? //if (([ssAlt, ssCtrl, ssCommand] * Shift) = []) then // Key := 0; end; if ((([ssAlt, ssCtrl, ssCommand] * Shift) <> []) or (Ch < ' ')) and (Key > 0) then Ch := #0; end;

Вывод

При работе с USB-сканерами в FMX-проектах в Delphi XE8 могут возникнуть проблемы с корректным вводом данных. В данной статье мы рассмотрели причину этой проблемы и предложили несколько решений, начиная от изменения настроек сканера и заканчивая изменением кода FMX.Platform.Win. Применение этих решений поможет вам корректно работать с USB-сканерами в FMX-проектах в Delphi XE8.

Создано по материалам из источника по ссылке.

Статья о решении проблемы корректного ввода данных с USB-сканера в FMX-проектах при использовании Delphi XE8.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сканер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:55:05/0.0060369968414307/0