【问题标题】:How can I simulate Alt+Shift to change the language in Windows (II part)?如何模拟 Alt+Shift 更改 Windows 中的语言(II 部分)?
【发布时间】:2011-03-10 08:45:15
【问题描述】:

问题(动态切换语言)已通过ActivateKeyboardLayout 解决,但当我在表单上动态创建组件时(例如 TEdit),它仍然存在。当该组件成为焦点时,语言将更改为默认值。在创建组件后,我再次尝试使用 ActivateKeyboardLayout,但没有成功。有什么想法吗?

【问题讨论】:

  • 你使用了 KLF_SETFORPROCESS 吗?
  • @TOndrej:我是这样使用的:LoadKeyboardLayout(someId, KLF_ACTIVATE)
  • 无法复制,我动态创建的编辑会保留更改后的布局。你能发布一个有问题的样本吗?
  • @Sertac Akyuz:我在表单上有一个 dbgrid。当我动态创建编辑时,我将父级设置为 dbgrid。 LoadKeyboardLayout 的初始调用是 onActivate。
  • 我认为您的问题与已知问题有关。请参阅 QC 报告 #79485:Keyboard layout swtching when exiting dbgrid control。并在 embarcadero 论坛上查看 this thread 以获取解决方法。

标签: delphi keyboard-shortcuts delphi-2009 keyboard-layout


【解决方案1】:

首先你必须使用“Windows”然后你可以使用这个方法: ActivateKeyboardLayout(EnglishLayoutHandle, KLF_ACTIVATE) 你可以为任何你想要的语言更改“EnglishLayoutHandle”

【讨论】:

    【解决方案2】:

    您的问题可能类似于this question

    否则此代码会执行此操作:

    keybd_event(VK_MENU, 0, 0, 0);
    keybd_event(VK_SHIFT, 0, 0, 0);
    keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0 );
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    

    【讨论】:

    • 此代码切换到下一种输入语言(并且仅在默认快捷方式未更改的情况下)。如果您有两种以上的输入语言,这将无济于事
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2011-06-17
    • 2016-08-09
    • 2015-09-08
    相关资源
    最近更新 更多