【问题标题】:My delphi application is incompatible with native keyboards. What should I do?我的 delphi 应用程序与本机键盘不兼容。我应该怎么办?
【发布时间】:2012-11-23 16:16:52
【问题描述】:

我的 delphi 应用程序与本机键盘不兼容。我应该怎么办? 为了解释更多,首先看这些图片:

这是意大利键盘的外观图片: http://en.wikipedia.org/wiki/Keyboard_layout#Italian

您可以在同一页面中找到普通的(美国键盘)。

如果我们使用普通键盘按 Shift+2(或任何 Shift+Number),则必须写入 @,但如果我们使用意大利语键盘按 " > 必须写。但在我的应用程序中,两个键盘都将每个键盘都视为普通键盘! 例如,当我在意大利语键盘中按 Shift+2 时,它会键入 @ 而不是 "

我使用的是 Delphi 7。您可以在此处测试我的应用程序:en.apadanasoftware.com/forums

提前谢谢

【问题讨论】:

    标签: delphi keyboard native


    【解决方案1】:

    发送到您的 Delphi 应用程序的字符由 Windows 控制,而不是 Delphi,唯一可能的例外是如果您正在拦截 Windows 消息并执行自定义键处理。

    如果您将两个键盘连接到同一台 PC,这可能是由于窗口加载了错误的键盘布局。

    在 Windows 中转到“控制面板/区域和语言选项”,然后在“语言”选项卡下,按“文本服务和输入语言”组框中的“详细信息”按钮,您应该能够看到您拥有的键盘布局如果需要,已加载并加载新的。

    How to change your keyboard layout from Microsoft

    【讨论】:

      【解决方案2】:

      您在应用程序中的何处接收键盘事件?

      如果您使用 OnKeyPress 事件,例如

      procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
      

      您将收到“@”形式的密钥:即转换由 Windows 完成。

      如果你使用 OnKeyDown 事件,比如

      procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
      

      您将收到虚拟键码,即原始键码,您必须使用 Shift 值对其进行转换。

      请参阅http://msdn.microsoft.com/en-us/library/dd375731(VS.85).aspx 了解虚拟键。

      我猜你在应用程序中使用了 OnKeyDown 而不是 OnKeyPress。

      【讨论】:

        【解决方案3】:

        首先我几乎被冒犯了,为什么你会认为美国键盘是“正常”的键盘?它没有我每天需要使用的任何重音字母!开个玩笑(是的,在我的美式键盘上输入这个),你问的是错误的和无关紧要的。原因如下:

        • 打印在键盘按钮上的文本与用户按下按钮时发生的情况几乎没有相似之处。键盘会生成一个“扫描代码”,Windows 根据所选的键盘格式对其进行解释。我可以在我的计算机上按 LeftALT+SHIFT 将键盘格式从美国旋转为罗马尼亚语。在我的家用电脑上,轮换中也有法语。当然,我的美式键盘上没有任何重音字母(如按钮上的印刷文字),但请放心,这完全无关紧要,因为我在打字时不看键:)李>
        • " 字符不在同一个按钮2 上这一事实不应该让您担心。这是最终用户的选择,最终用户确切地知道按什么键来获得任何符号。将 Shift+"2" 解释为 " 并不是在为他服务,因为这就是它在美式键盘上的含义!他会问他为什么在你的申请中输入" 并得到[

        我想说的是,您的应用程序不可能与本机键盘不兼容。它工作得很好,您只是不知道要按什么按钮 - 但最终用户知道,因为他拥有计算机和键盘。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          • 2020-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多