发送密钥到组件

问题描述:

我正在编写一个应用程序,用户将输入不同语言的数据到TcxGrid中。为了方便输入不在普通键盘上的按键(á或¿),我决定添加用户添加按钮的功能,当按下按钮时会直接发送一个字符到网格。发送密钥到组件

基本上按钮被按下,按钮上的标题是发送到网格的字符。现在我唯一的方法是获取活动网格单元格,在那里复制文本,追加要添加的字符,然后将网格值设置为新字符串。这似乎并不理想。

任何想法在干净的方式来做到这一点?

+0

Windows已经有这方面的设施。为什么重新发明*? – 2013-05-02 22:48:38

+1

如果用户使用任何频率键入的语言,则用户将简单地切换到操作系统中的该键盘布局,并且“键”将是多余的。如果它是用户通常不会输入的语言,那么您提供的“键”可能也不会被使用;相反,用户会去找到一个网站或文件与所需的文字,复制和粘贴。这是用户实际上对您的产品要求的东西,还是您正在为解决问题寻找解决方案? – 2013-05-02 23:11:28

+0

在操作系统中切换键盘布局会很快乏味。这个想法是让用户能够用英文输入一个短语,然后将同一短语翻译成另一种语言。对于短语来说,复制和粘贴可能会有相当大的用处,但添加外来字符的快速简单方法似乎对我来说是个好主意。 @DavidHeffernan:你的意思是虚拟屏幕键盘以外的东西吗? – Sentient 2013-05-03 18:01:30

如果您可以获取控件的句柄,则可以将消息发布到指示键入的控件。

PostMessage(Edit1.Handle, WM_CHAR, Ord('A'), 0); 

我敢肯定有一个滑头的方式来做到这一点,但我得到了你的人物在做这关使用“字符映射表”中:

const 
    testchar1 = 'Á'; 
    testchar2 = '¿'; 
begin 
    PostMessage(Edit1.Handle, WM_CHAR, Ord(testchar1), 0); 
    PostMessage(Edit1.Handle, WM_CHAR, Ord(testchar2), 0); 
end; 

如果你需要虚拟扫描码,使用WM_KEYDOWN和WM_KEYUP消息。

+0

我尝试使用grid.Handle没有期待太多,它没有工作。我正在寻找如何找到活动的编辑项目来使用它的句柄,但还没有找到它。感谢PostMessage提示,似乎它会工作,如果我能得到一个句柄。 – Sentient 2013-05-02 21:47:43

+0

我找到了一种使它工作的方法。如果没有其他解决方案出现,我会将其标记为答案,因为解决方案仍然看起来很花哨。我最终通过使用TcxGridBandedTableView对象的OnInitEdit事件来跟踪最后一个编辑项目,然后使用带有该句柄的PostMessage。 – Sentient 2013-05-02 23:02:16