AdvStringGrid编辑单元时使用软键盘失去焦点问题

GoingMerry 2016-02-04 09:39:49
编辑AdvStringGrid的单元格时,使用自己写的一个软键盘时失去焦点。具体操作使用软键盘输入一个数字然后再次点击软键盘的时候,当前正在编辑的单元格会失去焦点变成编辑完成状态,此时松开软键盘(会发送一个event事件输入一个字符)则会覆盖之前输入的内容,导致效果是使用软键盘永远只能输入一个字符,每次都会覆盖之前输入的,请问如何解决。软键盘是自己写的一个单独的窗体,按键响应代码如下
void __fastcall TfrmKbd::SpeedButton8Click(TObject *Sender)
{
::SetFocus(FormHdl); //FormHdl是grid所在窗口的句柄
String str = ((TButton *)Sender)->Hint;
if(str == "_")
{
// SendMessage(FormHdl, WM_KEYDOWN, VK_BACK, NULL);
keybd_event(8, 0, 0, 0); //Backspace键
keybd_event(8, 0, KEYEVENTF_KEYUP, 0);
}
else if(str == "<" || str == ">" || str == "*" || str == "+")
{
char curChar = str.c_str()[0];
keybd_event(16,0,0,0);//按下Shift键
keybd_event(VkKeyScan(curChar), 0, 0, 0);
keybd_event(VkKeyScan(curChar), 0, KEYEVENTF_KEYUP, 0);
keybd_event(16,0,KEYEVENTF_KEYUP,0);//松开Shift键
}
else
{
// SendMessage(FormHdl, WM_KEYDOWN, (WPARAM)*(str.c_str()), NULL);
char curChar = str.c_str()[0];
if(flag == 0 && (((int)curChar >= 65 && (int)curChar <= 90) || ((int)curChar >= 97 && (int)curChar <= 122))) //当前为大写 需要按下shift
{
keybd_event(16,0,0,0);//按下Shift键
}
keybd_event(VkKeyScan(curChar), 0, 0, 0);
keybd_event(VkKeyScan(curChar), 0, KEYEVENTF_KEYUP, 0);
if(flag == 0 && (((int)curChar >= 65 && (int)curChar <= 90) || ((int)curChar >= 97 && (int)curChar <= 122)))
{
keybd_event(16,0,KEYEVENTF_KEYUP,0);//松开Shift键
}
}
::SetFocus(FormHdl);

}
...全文
1145 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧