我的delphi应用程序与本机键盘不兼容。我该怎么办?

时间:2010-07-03 21:32:52

标签: delphi keyboard native

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

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

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

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

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

Thnx提前

3 个答案:

答案 0 :(得分:5)

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

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

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

How to change your keyboard layout from Microsoft

答案 1 :(得分:0)

您在应用程序中收到键盘事件的位置?

如果您使用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。

答案 2 :(得分:0)

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

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

我想说的是,您的应用程序不可能与本机键盘不兼容。它工作正常,你只是不知道按什么按钮 - 但最终用户知道,因为他拥有电脑和键盘。