【问题标题】:Using barcode scanner with Delphi在 Delphi 中使用条码扫描器
【发布时间】:2013-02-12 11:54:38
【问题描述】:

我正在开发一个 POS(宠物项目),并且正在考虑添加一个条形码扫描仪以更快地获取销售数据。我现在没有扫描仪,想问一些问题,因为我有点卡住了。

在销售屏幕上,我最初的想法是有一个TEdit 组件,当人们扫描产品时,它会用字符串填充TEdit。现在我遇到的问题是我想让TEdit 不可见,这样人就看不到它了。但是一旦你让TEdit 不可见,你就不能把注意力集中在它上面,所以这个计划就行不通了。

那么任何人都可以建议我可以使用什么来“捕获”扫描的字符串吗?我如何让组件监听并等待扫描仪?我假设扫描仪就像一个普通的键盘事件,比如按下或按下按钮。

【问题讨论】:

  • 条形码扫描仪通常会发送击键,因此您可以像处理键盘一样处理它。如果您不希望有可见的编辑,您可以使用 OnKey Up/Down/Press 事件在表单级别处理击键。
  • 我明白了,但是一旦有 OnKey 事件,我将使用什么来捕获条形码的字符串。使用 TEdit 很容易,因为我可以让字符串出现在 TEdit 中并从那里获取。
  • 原来问题与条码扫描器关系不大,而更多的是与“如何在没有集中控制的情况下接收文本”有关。对吗?
  • @Krom 是的,这将是一个更好的问题。
  • 有些条码扫描器可以绕过“键盘楔”,您可以将您的程序直接连接到条码扫描器设备,该设备显示为您程序的串行端口。对于某些应用程序,我发现这优于 HID/键盘楔子。只是为您提供信息。

标签: delphi delphi-xe2 barcode-scanner point-of-sale keypreview


【解决方案1】:

您还可以将 TEdit 放置在可见窗口之外,将组件的 Top 和 Left 属性设置为 -50 之类的值。然后,您可以像常规可见的 TEdit 框一样为其设置焦点,但它对用户是不可见的。

【讨论】:

    【解决方案2】:

    您可以使用高度和宽度为 0 的 TEdit,这样它就不会出现,并确保它在您扫描条形码时获得焦点。

    【讨论】:

      【解决方案3】:

      我所做的是使用 KeyPreview 来监视功能键,例如 F9,条形码扫描仪设置为扫描前缀。收到此信息后,我会弹出一个带有单个编辑框和确定按钮的对话框。然后它会接收其余的条形码信息,扫描仪会使用 Enter 键结束输入。然后我可以确定扫描数据的用途(在我的情况下,一种类型以前缀开头),然后将数据放入主表单上的适当字段中。

      我选择 F9 是因为它在大多数应用程序中似乎是惰性的,因此您可以以其他方式使用扫描仪,但我也支持其他键以实现灵活性。我的应用程序还有一个扫描仪测试模式,它显示发送的密钥。

      【讨论】:

        【解决方案4】:

        TForm 上有 KeyPreview 属性。将其设置为 true,这样所有的按键都会先由表单处理,然后再由控件处理。

        关于Delphi中键盘处理的文章:http://delphi.about.com/od/objectpascalide/a/keyboard_events.htm

        相关SO问题:How does Delphi's KeyPreview work?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-03
          相关资源
          最近更新 更多