Вы можете использовать событие OnShortcut в форме, чтобы перехватывать нажатия клавиш. Проверьте, установлен ли префикс, который вы настроили на штрих-кодовом экране, и настройте его как обработанные, пока не получите суффикс сканера штрих-кода. Внутри вашего ярлыка-манипулятора создается строка штрих-кода
Следующий код адаптирован из того, что я использую сам, но не проверен в его текущей форме.
// Variables defined on Form object
GettingBarcode : boolean;
CurrentBarcode : string;
TypedInShiftState: integer; // 16=shift, 17=ctrl, 18=alt
procedure Form1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var
Character:Char;
begin
Character:=Chr(MapVirtualKey(Msg.CharCode,MAPVK_VK_TO_CHAR));
if GettingBarcode then
begin
// Take care of case
if (TypedInShiftState<>16) and CharInSet(Character,['A'..'Z']) then
Character:=Chr(Ord(Character)+32);
TypedInShiftState:=0;
// Tab and Enter programmed as suffix on barcode scanner
if CharInSet(Character,[#9, #13]) then
begin
// Do something with your barcode string
try
HandleBarcode(CurrentBarcode);
finally
CurrentBarcode:='';
Handled:=true;
GettingBarcode:=False;
end;
end
else if CharInSet(Character,[#0..#31]) then
begin
TypedInShiftState:=Msg.CharCode;
Handled:=True;
end
else begin
CurrentBarcode:=CurrentBarcode+Character;
Handled:=true;
end;
end
else begin
if Character=#0 then
begin
TypedInShiftState:=Msg.CharCode;
end
else if (TypedInShiftState=18) and (Character='A') then
begin
GettingBarcode:=True;
CurrentBarcode:='';
Handled:=true;
end;
end;
end;
Обычно вы * хотите * иметь текстовое поле в любом случае, чтобы пользователи могли вручную вводить штрих-код, если сбой сканирования. Вот почему я считаю, что это лучший выбор. –
Вот как мы это делаем с проверкой читателей; будь то клавиатурный клин или USB, мы настраиваем их для отправки начального символа, который не так легко набирается на клавиатуре.Когда мы видим эту последовательность с помощью метода keydown формы, мы проглатываем эти специальные нажатия клавиш и перемещаем фокус ввода в нужное поле редактирования. Работает очень хорошо. – robsoft