請問:怎麼在EDIT控件中實現不能用鍵盤輸入,只能用掃碼槍掃入條碼?謝謝!

解决方案 »

  1.   

    胡说,设为只读可以禁止键盘输入,扫描枪扫描后,会触发对应的事件,你可以通过代码给edit赋值
      

  2.   

    不用做任何事情
    扫描枪的驱动会把扫得的条码作为按键输入到edit的
      

  3.   

    edit.readonly:=true;
    edit.text:='啊打发敖德萨发大水发大水';
      

  4.   

    这有什么好给的,扫描枪接口会直接返回条码值,你只需要Edit.Text := xxxxx就行了
      

  5.   


    如果这样,你还提供个Edit干嘛,干脆用个Label,然后在Form.OnKeyPress中中代码回显扫描进来的输入即可。
      

  6.   

    好像不是那么简单吧,首先扫描枪扫描后应该是触发keypress事件吧?如果你响应这个事件,那你按键盘的时候不也同样的会响应这个事件吗?
      

  7.   


    可是系统就是把扫描枪当作键盘一样看待的。如果一定说键盘不能用来录入,可能只能:
    1. 去直接访问驱动程序的输入;
    2. 据说有个底层钩子可以在键盘事件产生之前获得输入,也许用这个钩子可以达到目的:http://topic.csdn.net/u/20100313/19/23e1bae3-361f-463f-9fba-925b108f075c.html
      

  8.   


    没接触过扫描枪,两年前一次工作机会,接触到一个磁卡的读卡器,就像超市刷银行卡的那个东东,和扫描枪的原理一样,也是响应keypress事件,但是那个和键盘是同样的原理,所以肯定枪能触发,键盘就肯定能触发
      

  9.   

    换成label就完事了,不用那么复杂了。
      

  10.   

    我晕啊,问题是你要实现扫描枪输入的话,最简单的办法就是响应keypress事件,就算用label,你在keypress事件里面不照样会修改label的caption吗?那点键盘不照样会修改label的caption吗?
      

  11.   

    我倒是想到那么一个方法,在keypress里面不直接修改edit的值,而是用一个全局的字符串来记录,只有当读到一个#13的字符的时候,就把那个全局的字符串放到edit里面,并且清空字符串。但是有一个问题就是,如果在使用扫描枪之前点了两下键盘,再扫描,这个时候点的键盘的信息也会被记录下来。这个怎么解决呢?
      

  12.   

    可不可以这样呢,如果是键盘输入,肯定会让那个EDIT控件得到焦点,但扫描枪不一定,可以设成,当这个控件得到焦点时不让输入。如果说扫描枪也会先得焦点的话,那就用两个EDIT控件,一个得值,一个传值 。得值的那个控件如果不想让输入,又不能隐藏和只读,可以把它拉到窗体外面去。
      

  13.   

    一定要区分 按键来源 是 键盘还是扫描枪可以在按键的 间隔 和 长度(字符数、最后是回车) 里做判断
    只接受 2个连续字符间停顿时间小于xx毫秒的,这样得到的字符串长度为y,且最后一个字符是回车的,才真正接受