发送密钥到组件
问题描述:
我正在编写一个应用程序,用户将输入不同语言的数据到TcxGrid中。为了方便输入不在普通键盘上的按键(á或¿),我决定添加用户添加按钮的功能,当按下按钮时会直接发送一个字符到网格。发送密钥到组件
基本上按钮被按下,按钮上的标题是发送到网格的字符。现在我唯一的方法是获取活动网格单元格,在那里复制文本,追加要添加的字符,然后将网格值设置为新字符串。这似乎并不理想。
任何想法在干净的方式来做到这一点?
答
如果您可以获取控件的句柄,则可以将消息发布到指示键入的控件。
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消息。
Windows已经有这方面的设施。为什么重新发明轮子? – 2013-05-02 22:48:38
如果用户使用任何频率键入的语言,则用户将简单地切换到操作系统中的该键盘布局,并且“键”将是多余的。如果它是用户通常不会输入的语言,那么您提供的“键”可能也不会被使用;相反,用户会去找到一个网站或文件与所需的文字,复制和粘贴。这是用户实际上对您的产品要求的东西,还是您正在为解决问题寻找解决方案? – 2013-05-02 23:11:28
在操作系统中切换键盘布局会很快乏味。这个想法是让用户能够用英文输入一个短语,然后将同一短语翻译成另一种语言。对于短语来说,复制和粘贴可能会有相当大的用处,但添加外来字符的快速简单方法似乎对我来说是个好主意。 @DavidHeffernan:你的意思是虚拟屏幕键盘以外的东西吗? – Sentient 2013-05-03 18:01:30