2010-04-22 4 views
9

저는 최근 Metrologic Barcode 스캐너 (USB 포트)를 구입했습니다. 모두가 이미 상자에서 키보드 에뮬레이터로 작동한다는 것을 알고 있습니다.사용자가 먼저 텍스트 상자를 포커스하지 않고도 바코드를 읽을 수 있습니까?

내 앱이 바코드 데이터를 직접 처리 할 수 ​​있도록 스캐너와 내 애플리케이션을 어떻게 구성합니까? 즉, 사용자가 "텍스트 필드"에 집중하고 KeyPress 이벤트가 발생하면 데이터를 처리하지 못하게합니다.

답변

5

일반적으로 바코드 스캐너는 문자열 앞뒤에 일부 문자를 보내도록 구성 할 수 있습니다. 예를 들어 바코드 문자열 앞에 "F12"를 붙이면 캡처하여 오른쪽 필드로 옮길 수 있습니다.

어떻게 바코드 스캐너 설명서를 확인하십시오.

+3

일반적으로 검색에 실패하면 사용자가 바코드를 수동으로 입력 할 수 있도록 텍스트 필드가 있어야합니다. 이것이 제가 이것이 최선의 선택이라고 생각하는 이유입니다. –

+0

이것은 우리가 수표 독자와 함께하는 방법입니다. 키보드 웨지인지 USB인지에 관계없이 키보드에서 쉽게 입력 할 수없는 시작 문자 시퀀스를 보내도록 구성합니다.폼의 keydown 메소드를 통해 그 시퀀스를 볼 때, 우리는이 특별한 keypresses를 삼키고 입력 포커스를 원하는 편집 상자로 이동시킵니다. 꽤 잘 작동합니다. – robsoft

1

내가 더 높은 수준에서 윈폼에서 같은 PreviewKeyDown을 키 누름을 차단하는 것이 작업을 수행하는 가장 쉬운 방법을 추측 (또는 양식에 KeyDown을 사용, trueKeyPreview를 설정하고 키를 중지 e.SuppressKeyPress를 사용 컨트롤로 이동). 일 수도 있고 일 수도 있습니다. 그렇지 않을 수도 있습니다.

0

폼에서 OnShortcut 이벤트를 사용하여 키보드 누를 가로 챌 수 있습니다. 바코드 스캐너에 구성한 접두사가 나타나는지 확인하고 바코드 스캐너 접미사를 얻을 때까지 Handled al keypresses로 설정하십시오. 바로 가기 처리기에서 바코드 문자열을 작성하십시오.

다음 코드는 나 자신을 사용하지만 현재 양식에서는 테스트되지 않았습니다.

// 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; 
3

바코드에는 USB 커넥터가 있지만. 키보드 웨지 또는 RS232로 프로그래밍 할 수 있습니다. 보기이 페이지가

Q.이 USB 키보드 및 USB 판매 시점의 차이 무엇입니까 말한다 http://www.instrumentsandequipmentco.com/support/faq-metrologic.htm ? USB 키보드로 통신하도록 MX009를 설정하면 스캔 한 데이터가 PC에서 현재 활성화되어있는 응용 프로그램에 나타납니다. 데이터는 키보드에서 건반을 누른 것처럼 입력됩니다. MX009가 USB POS 장치로 통신하도록 설정되어 있으면 데이터는 RS232 데이터와 같은 USB 포트로 전송되고 USB 포트는 COM 포트처럼 구성되어야합니다. MX009는 공장 출하시 USB 키보드 또는 USB POS (Point of Sale)로 설정됩니다.

프로그램에서 RS232를 수락하면 더 이상 텍스트 필드에 포커스가 필요하지 않습니다. 바코드의 끝에 캐리지 리턴/CR/$ 0D -

  1. 은 판매 시점 다시 프로그래밍은 일반적으로 접미사를 보낼 수
  2. (RS232)로 바코드를 다시 프로그램.

코드에서 전체 바코드를 사용할 수있는 경우 캐리지 리턴을 찾아보십시오.

관련 문제