編輯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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/83388.html
標籤:VCL組件使用和開發
