請問如何判斷用戶通過輸入法選擇了一個詞組?還有就是如何程序中如何獲取這個選擇詞組的字符串? |
尚未結案
|
markss
一般會員 發表:1 回覆:2 積分:0 註冊:2003-04-03 發送簡訊給我 |
我現在通過一些button模擬鍵盤按鍵,然後調用輸入法來輸入中文。
因爲每一次點擊button(模擬鍵盤的一個按鍵)都會使edit失去focus,所以在button click事件中每一次都得重新edit1.setfocus。但是這樣有一個問題就是輸入法的選擇框會不停的閃爍,所以我想只有在用戶輸入了一個了句子並且確認之後(例如:點擊了enter按鍵)才獲取用戶的輸入句子並且賦值給edit1。所以就必須要判斷用戶什麽時候確認選擇的詞組,並且在那個時候獲取這個字符串。
我在測試的時候,如果是每一個按鍵時都edit1.setfocus就都可以通過,雖然會不停的閃爍。但是如果判斷用戶確認信息的話,就會出問題。請高人們幫忙看看拉。搞了好久都搞不出來啊。痛苦!! //第一種寫法可以通過
procedure TForm1.BtnClick(Sender: TObject);
var
aKeystoke: integer;
begin
edit1.SetFocus;
edit1.SelStart := length(edit1.Text) 1;
akeyStoke := (sender as TButton).tag; //在每一個button.tag中記錄模擬的按鈕的鍵值
keybd_event(aKeyStoke,0,0,0);
keybd_event(aKeyStoke,0,KEYEVENTF_KEYUP,0);
end; //第二種做法老是不能獲得字符串
procedure TForm1.BtnClick(Sender: TObject);
var
aKeystoke: integer; hIC: HIMC;
pBuf: pchar;
dwBufLen: DWORD;
Compstr: string; begin
//如果是輸入法狀態時
if ImmIsIME(GetKeyboardLayOut(0)) then
begin akeyStoke := (sender as TButton).tag;//在每一個button.tag中記錄模擬的按鈕的鍵值
keybd_event(aKeyStoke,0,0,0);
keybd_event(aKeyStoke,0,KEYEVENTF_KEYUP,0); //模擬按鍵 hIC := ImmGetContext(Form1.Handle ); //取得當前thread的input contex dwBufLen := ImmGetCompositionString(hIC, GCS_RESULTSTR, nil, 0);
if dwBufLen <= 0 then
begin
Exit;
end; try
GetMem(pBuf, dwBufLen 1);
if ImmGetCompositionString(hIC, GCS_RESULTSTR, pBuf, dwBufLen) > 0 then
begin
Compstr := string(StrLCopy(pBuf, pBuf, dwBufLen));
edit1.Text := edit1.Text compstr;
edit1.setfocus;
edit1.SelStart := length(edit1.Text) 1;
end;
finally
FreeMem(pBuf, dwBufLen 1);
ImmReleaseContext(Form1.Handle , hIC);
end;
end {for ime test}
else
begin
edit1.SetFocus;
edit1.SelStart := length(edit1.Text) 1;
akeyStoke := (sender as TButton).tag;
keybd_event(aKeyStoke,0,0,0);
keybd_event(aKeyStoke,0,KEYEVENTF_KEYUP,0);
end;
end;
|
markss
一般會員 發表:1 回覆:2 積分:0 註冊:2003-04-03 發送簡訊給我 |
|
markss
一般會員 發表:1 回覆:2 積分:0 註冊:2003-04-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |