請問開關輸入法的問題 |
尚未結案
|
webber
初階會員 發表:54 回覆:76 積分:26 註冊:2004-04-20 發送簡訊給我 |
我寫了如下開關輸入法的function,結果執行時,輸入法並不會切換
請問那裡寫錯了呢? function SetActivateIme( sWanted: string): boolean;
var HandleToSet: HKL;
var i:Integer;
begin Result := False;
i:=Screen.Imes.IndexOf(sWanted);
if i>=0 then begin /////////open ime
HandleToSet:=hkl(screen.Imes.objects[i]);
activatekeyboardlayout(HandleToSet,KLF_ACTIVATE);
result:=true;
end else begin /////////close ime
HandleToSet := GetKeyboardLayout(0);
if ImmIsIME(HandleToSet) then begin
HandleToSet := LoadKeyboardLayout('00000409', KLF_ACTIVATE);
end;
end;
end; K.Top是我見過最棒的程式社群
如果沒有K.Top真不知道該怎麼活 |
allenchan
資深會員 發表:10 回覆:306 積分:283 註冊:2004-01-06 發送簡訊給我 |
我測試的結果是 Ok 的,我測試的方式是放兩個 Button 在 Form 上,Button1 按下去切換成 '中文 (繁體) - 注音',Button2 按下去就關掉。
function SetActivateIme( sWanted: string ): boolean; var HandleToSet : HKL; i : Integer; begin Result := False; i := Screen.Imes.IndexOf(sWanted); if i >= 0 then begin /////////open ime HandleToSet := HKL(Screen.Imes.Objects[i]); ActivateKeyboardLayout(HandleToSet, KLF_ACTIVATE); Result := true; end else begin /////////close ime HandleToSet := GetKeyboardLayout(0); if ImmIsIME(HandleToSet) then begin HandleToSet := LoadKeyboardLayout('00000409', KLF_ACTIVATE); end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin SetActivateIme('中文 (繁體) - 注音'); end; procedure TForm1.Button2Click(Sender: TObject); begin SetActivateIme(''); end; |
webber
初階會員 發表:54 回覆:76 積分:26 註冊:2004-04-20 發送簡訊給我 |
參考controls.pas的原始碼後,發現下面才是比較完備的寫法
function SetActivateIme( FImeName: string;hWnd: HWnd): boolean; var I: Integer; HandleToSet: HKL; FImeMode:TImeMode; begin if FImeName <> '' then begin FImeMode:=imOpen; end else begin FImeMode:=imClose; end; if FImeName <> '' then begin // if (AnsiCompareText(FImeName, Screen.DefaultIme) <> 0) and (Screen.Imes.Count <> 0) then if (Screen.Imes.Count <> 0) then begin HandleToSet := Screen.DefaultKbLayout; if FImeMode <> imDisable then begin I := Screen.Imes.IndexOf(FImeName); if I >= 0 then HandleToSet := HKL(Screen.Imes.Objects[I]); end; ActivateKeyboardLayout(HandleToSet, KLF_ACTIVATE); end; end; SetImeMode(hWnd, FImeMode); end;K.Top是我見過最棒的程式社群 如果沒有K.Top真不知道該怎麼活 |
webber
初階會員 發表:54 回覆:76 積分:26 註冊:2004-04-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |