怎麼在EDIT控件中實現不能用鍵盤輸入,只能用掃碼槍掃入?

X_0 2010-03-24 11:50:45
請問:怎麼在EDIT控件中實現不能用鍵盤輸入,只能用掃碼槍掃入條碼?謝謝!
...全文
594 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChipHead 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sz_haitao 的回复:]

一定要区分 按键来源 是 键盘还是扫描枪

可以在按键的 间隔 和 长度(字符数、最后是回车) 里做判断
只接受 2个连续字符间停顿时间小于xx毫秒的,这样得到的字符串长度为y,且最后一个字符是回车的,才真正接受
[/Quote]

如果一定要区分键盘和扫描枪,恐怕也只有这个方法了。
X_0 2010-03-24
  • 打赏
  • 举报
回复
能簡單給我寫兩句嗎?萬分感謝
haitao 2010-03-24
  • 打赏
  • 举报
回复
不用做任何事情
扫描枪的驱动会把扫得的条码作为按键输入到edit的
bdmh 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 x_0 的回复:]
設為只讀,掃碼也進不去了
[/Quote]
胡说,设为只读可以禁止键盘输入,扫描枪扫描后,会触发对应的事件,你可以通过代码给edit赋值
X_0 2010-03-24
  • 打赏
  • 举报
回复
設為只讀,掃碼也進不去了
yct0605 2010-03-24
  • 打赏
  • 举报
回复
edit设置为只读......
X_0 2010-03-24
  • 打赏
  • 举报
回复
掃碼槍是跟鍵盤插在一起的,用個1轉2的連在一起,而且不插鍵盤,掃碼槍也不能用,這是不是沒辦法屏蔽鍵盤啊?
haitao 2010-03-24
  • 打赏
  • 举报
回复
一定要区分 按键来源 是 键盘还是扫描枪

可以在按键的 间隔 和 长度(字符数、最后是回车) 里做判断
只接受 2个连续字符间停顿时间小于xx毫秒的,这样得到的字符串长度为y,且最后一个字符是回车的,才真正接受
Harryfin 2010-03-24
  • 打赏
  • 举报
回复
我一直认为最好把这个技术问题转化为管理的问题
天火 2010-03-24
  • 打赏
  • 举报
回复
可不可以这样呢,如果是键盘输入,肯定会让那个EDIT控件得到焦点,但扫描枪不一定,可以设成,当这个控件得到焦点时不让输入。如果说扫描枪也会先得焦点的话,那就用两个EDIT控件,一个得值,一个传值 。得值的那个控件如果不想让输入,又不能隐藏和只读,可以把它拉到窗体外面去。
scfanxzq 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 harryfin 的回复:]
扫描枪是模拟键盘输入的,触发后会返回一串字符串和一个回车符
[/Quote]
我倒是想到那么一个方法,在keypress里面不直接修改edit的值,而是用一个全局的字符串来记录,只有当读到一个#13的字符的时候,就把那个全局的字符串放到edit里面,并且清空字符串。但是有一个问题就是,如果在使用扫描枪之前点了两下键盘,再扫描,这个时候点的键盘的信息也会被记录下来。这个怎么解决呢?
scfanxzq 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yct0605 的回复:]
换成label就完事了,不用那么复杂了。
[/Quote]
我晕啊,问题是你要实现扫描枪输入的话,最简单的办法就是响应keypress事件,就算用label,你在keypress事件里面不照样会修改label的caption吗?那点键盘不照样会修改label的caption吗?
haochin 2010-03-24
  • 打赏
  • 举报
回复
键盘和扫描枪是同一种输入设备吧。
yct0605 2010-03-24
  • 打赏
  • 举报
回复
换成label就完事了,不用那么复杂了。
Harryfin 2010-03-24
  • 打赏
  • 举报
回复
扫描枪是模拟键盘输入的,触发后会返回一串字符串和一个回车符
scfanxzq 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ok1411 的回复:]
自己试试不就知道了
[/Quote]

没接触过扫描枪,两年前一次工作机会,接触到一个磁卡的读卡器,就像超市刷银行卡的那个东东,和扫描枪的原理一样,也是响应keypress事件,但是那个和键盘是同样的原理,所以肯定枪能触发,键盘就肯定能触发
ChipHead 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 scfanxzq 的回复:]
好像不是那么简单吧,首先扫描枪扫描后应该是触发keypress事件吧?如果你响应这个事件,那你按键盘的时候不也同样的会响应这个事件吗?
[/Quote]

可是系统就是把扫描枪当作键盘一样看待的。如果一定说键盘不能用来录入,可能只能:
1. 去直接访问驱动程序的输入;
2. 据说有个底层钩子可以在键盘事件产生之前获得输入,也许用这个钩子可以达到目的:http://topic.csdn.net/u/20100313/19/23e1bae3-361f-463f-9fba-925b108f075c.html
flew0214 2010-03-24
  • 打赏
  • 举报
回复
直接拔掉键盘吧。。
ok1411 2010-03-24
  • 打赏
  • 举报
回复
自己试试不就知道了
scfanxzq 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bdmh 的回复:]
引用 5 楼 x_0 的回复:
能簡單給我寫兩句嗎?萬分感謝

这有什么好给的,扫描枪接口会直接返回条码值,你只需要Edit.Text := xxxxx就行了
[/Quote]
好像不是那么简单吧,首先扫描枪扫描后应该是触发keypress事件吧?如果你响应这个事件,那你按键盘的时候不也同样的会响应这个事件吗?
加载更多回复(3)

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧