我希望能够使用Microsoft Vista的语音识别来指示我的Delphi应用程序.然而,当试图指挥TMemo时,它根本不起作用.我注意到Firefox 3.0有同样的问题,在他们联系微软之后,他们告诉他们需要为他们的应用程序实现Text Services Framework.
我想知道是否有任何方法可以在Delphi中实现这一点,以便我可以指定TMemo或TRichEdit.在Google上搜索解决方案并未返回任何相关结果.我从哪里开始寻找解决方案?
编辑:我发现有一种方法可以在所有程序中启用语音识别,即使是那些不支持语音识别的程序,只需转到Windows语音识别选项并选择在任何地方启用听写.但是,当您使用此命令进入不使用文本服务框架的编辑框时,它总是会弹出备用面板,该面板显示提示说出所需项目旁边的数字,然后单击确定.虽然这可能适用于短句,但它没有许多有用的功能,例如纠正或删除单词.所以我仍然试图弄清楚如何在不依赖于启用任何地方的听写选项的情况下启用语音识别.
delphi speech-recognition text-services-framework windows-vista
我希望能够支持自定义 Windows 控件中的文本输入,就像 EDIT 和 Rich Edit 控件已经做的那样,但不对其中任何一个控件进行子类化。该控件当前使用 Direct2D 和 DirectWrite 绘制文本,并在带有平台更新的 Windows Vista SP1 或更高版本上运行(如果我决定需要更新的 Direct2D 和 DirectWrite 功能,我可能会将其更改为带有平台更新的 Windows 7 SP1 或更高版本,假设这些功能是在那里可用或仅在 Windows 8 上可用,但这是一个不同的问题......)
就其价值而言,在 OS XI 上我会使用NSTextInputClient,在 GTK+ 上我会使用GtkIMContext。我正在谈论的就是这样的事情。
显而易见的选择是使用WM_CHAR,如果我正确收集的话,如果窗口类是用 注册的RegisterClassW(),那么它本身就是 UTF-16 ,因此无论位置如何都应该“正常工作”。然而,WM_CHAR是由 生成的TranslateMessage(),并且它的文档说没有办法确定 a 是否WM_CHAR已生成,因为TranslateMessage()总是返回非零。我需要能够确定当前的键盘消息是否将由文本系统处理(因此应该被忽略);这尤其正确,因为所有非文本键都需要以独立于布局的方式处理(我已经有了)。
我还在 Windows 7 示例代码中看到了 IMM API 和文本服务框架。我不确定一个是否比另一个更好,而且他们似乎都做同样的事情。他们吗?
就 IMM 而言,有许多WM_IMM_xxx消息我不确定是否应该忽略,并且我发现的每个参考文献似乎都不同意我是否应该在 Unicode 窗口中处理它们。 ..此外,上述了解 IMM 是否会处理给定按键事件的问题仍然悬而未决;有办法吗?
TSF 有一个称为 ACP 的概念,它似乎允许我使用我想要的任何文本存储格式来存储我实际要使用的文本(即,不是正在进行的合成)。这是真的?我希望能够将文本存储为带有属性的 UTF-8,在绘图时转换为 …
这是《在 Windows 上处理自定义控件中的任意文本输入的正确、现代方法是什么?》的延续。WM_CHAR?注塑机?TSF?。
\n\n因此,在尝试了非 IME 布局(美国英语)、非 TSF IME(Windows XP DDK 中的日语 FAKEIME)和 TSF 文本服务(Windows 7 附带的任何内容)后,看来如果活动输入处理器配置文件不是 TSF 文本服务(即,它是TF_PROFILETYPE_KEYBOARDLAYOUT),我仍然需要处理击键和WM_CHAR消息来进行文本输入。
我的问题是我的架构需要一种方式来告知它可以忽略当前的关键消息,因为它已转换为文本输入消息。它不关心这是发生在翻译之前还是之后;它只需要知道这样的翻译将会或已经发生。或者用伪代码术语来说:
\n\n// if I can suppress WM_CHAR generation and synthesize it myself (including if the translation is just dead keys)\ncase WM_KEYDOWN:\ncase WM_SYSKEYDOWN:\n if (WillTranslateMessage())\n InsertChar(GenerateEquivalentChar());\n else\n HandleRawKeyEvent();\n break;\n\n// if I can know if a WM_CHAR was generated (or will be generated; for instance, in the case of dead keys)\ncase WM_KEYDOWN:\ncase …Run Code Online (Sandbox Code Playgroud)