2010-07-03 66 views
1

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

以下是对意大利的键盘看起来像一个形象: http://en.wikipedia.org/wiki/Keyboard_layout#Italian

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

如果我们按下Shift + 2(或Shift +号码)与正常键盘@必须写,但如果我们与意大利键盘做一个必须写,但在我的应用程序,这两个键盘,它把每一个键盘作为一个普通的键盘! 例如,当我按下意大利键盘内的Shift + 2,它类型@而不是“

我使用的是德尔福7.你可以测试我的应用程序here:en.apadanasoftware.com/forums

Thnx预先

回答

5

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

如果您将两个键盘连接到同一台PC,则可能是因为加载了错误键盘布局的窗口造成的。

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

How to change your keyboard layout from Microsoft

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。

0

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

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

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