全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3346
推到 Plurk!
推到 Facebook!

Windows2000下指定輸入法

 
panda566
一般會員


發表:3
回覆:4
積分:1
註冊:2002-03-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-10 15:56:03 IP:211.72.xxx.xxx 未訂閱
各位大大安安    我下載了Windows2000下指定輸入法的範例,  已可以切換各種輸入法了    但...    怎麼切換回英數ㄚ???< > 範例中有一段有寫, 但好像沒作用ㄋㄟ~~~ 煩請各位大大解說, 謝謝啦!!< >
scottliou
版主


發表:16
回覆:56
積分:47
註冊:2002-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-16 02:01:45 IP:61.70.xxx.xxx 未訂閱
你試一下將輸入法名稱隨便輸入一個不存在的輸入法名稱,例如AA , BB ... 我在98是如此做 2000好像也可以,只是不知道是轉成預設或真的轉回英數就沒試過了 ~~~~~~~~~~~~~~~~ 有夢想最美......
------
~~~~~~~~~~~~~~~~
有夢想最美......
panda566
一般會員


發表:3
回覆:4
積分:1
註冊:2002-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-18 08:50:54 IP:211.72.xxx.xxx 未訂閱
以下是我try出來的結果,  應該是可以達到中英輸入法切換的目的,  各位大大若更好的方法, 可以post上來大家參考... > >
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-12 11:02:37 IP:211.20.xxx.xxx 未訂閱
引言: 各位大大安安 我下載了Windows2000下指定輸入法的範例, 已可以切換各種輸入法了 但... 怎麼切換回英數ㄚ???< > 範例中有一段有寫, 但好像沒作用ㄋㄟ~~~ 煩請各位大大解說, 謝謝啦!!< >
以下是我去年寫的兩個關於輸入法的函數,參考看看 // -------------------------------------------------------- // -------------------------------------------------------- // procedure : 中/英文輸入切換 // parameters : ImeStates(OpenIme, CloseIme) 要開啟/關閉中文輸入法(開/關) // Handles(要切換輸入法的control的HANDLE) // author : 謝榮沛 // -------------------------------------------------------- procedure ChangeIME(ImeStates : TImeState; Handles : THandle); var hlkCurrent : HKL; DefaultHKL : String; Reg: TRegIniFile; begin Reg := TRegIniFile.Create('SOFTWARE\TFN'); DefaultHKL := Reg.ReadString('', 'DefaultHKL', 'e0010404'); Reg.CloseKey; Reg.Free; hlkCurrent := GetKeyboardLayout(0); case ImeStates of CloseIme : begin if ImmIsIME(hlkCurrent) then hlkCurrent := LoadKeyboardLayout('00000409', KLF_ACTIVATE); // ImmSimulateHotKey(Handles, IME_THotKey_IME_NonIME_Toggle); end; OpenIme : begin if not ImmIsIME(hlkCurrent) then hlkCurrent := LoadKeyboardLayout(pchar(DefaultHKL), KLF_ACTIVATE); // ImmSimulateHotKey(Handles, IME_THotKey_IME_NonIME_Toggle); end; end; ActivateKeyboardLayout(hlkCurrent, KLF_REORDER); end; //------------------------------------------------------------// // procedure : 取得系統安裝的輸入法 // // author : 謝榮沛 2000/06/30 // //Text:輸入法的說明,Value:輸入法的代碼 // //------------------------------------------------------------// procedure GetIME(Text, Value : TStrings); var reg : TRegIniFile; i : integer; s, t : TStringList; temp : String; begin Value.Clear; Text.Clear; reg := TRegIniFile.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey('SYSTEM\ControlSet001\Control\Keyboard Layouts', False); t := TStringList.Create; s := TStringList.Create; reg.GetKeyNames(t); for i := t.Count-1 downto 0 do begin if UpperCase(copy(t.Strings[i], 1, 1))='E' then s.Add(t.Strings[i]); end; for i := 0 to s.Count-1 do begin temp := reg.ReadString(s.Strings[i], 'Layout Text', ''); Text.Add(temp); Value.Add(s.Strings[i]); end; reg.Free; s.Free; t.Free; end; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-06 20:24:59 IP:211.20.xxx.xxx 未訂閱
對不起, 舊飯新炒一下, 請教大大們: 依範例, 手動方式選擇所要的輸入法, 已大致了解, 但問題若改為由程式自行detect目前USer所慣用的輸入法(預設), 待輸入欄位為中文時,自動將輸入法改為其所慣用者, 而當跳下一非為中文欄位時, 又會自動切為英數輸入法時, 則應如何實作呢? (因程式可能有多人使用, 而每人之輸入法又可能不同, 故有此一問)在此先謝謝了!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-07 12:17:05 IP:211.78.xxx.xxx 未訂閱
引言: 對不起, 舊飯新炒一下, 請教大大們: 依範例, 手動方式選擇所要的輸入法, 已大致了解, 但問題若改為由程式自行detect目前USer所慣用的輸入法(預設), 待輸入欄位為中文時,自動將輸入法改為其所慣用者, 而當跳下一非為中文欄位時, 又會自動切為英數輸入法時, 則應如何實作呢? (因程式可能有多人使用, 而每人之輸入法又可能不同, 故有此一問)在此先謝謝了!
你可以用模擬CTRL_SPACE方式作業, 如果上次停在新注音, 就是新注音-英數, 如果是倉額, 就是倉頡-英數這樣的切換 function SetKey2Ime(aObj: TWinControl): boolean; //模擬ctrl-space來切換中英文 function TSysUT.SetKey2Ime(aObj: TWinControl): boolean; begin ImmSimulateHotKey(aObj.Handle, IME_THOTKEY_IME_NONIME_TOGGLE); result:= True; end;
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-07 17:19:27 IP:211.20.xxx.xxx 未訂閱
So, 綜合各位大大的指導, 特匯集輸入法切換如下: (edit1~edit4為使用指定方式, edit5 則模擬CTRL_SPACE方式作切換. 若尚有改進空間, 還請多指教!! TKs unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Imm; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; procedure Edit1Enter(Sender: TObject); procedure Edit2Enter(Sender: TObject); procedure Edit3Enter(Sender: TObject); procedure Edit4Enter(Sender: TObject); procedure Edit5Enter(Sender: TObject); private { Private declarations } public { Public declarations } end; const nHKL_LIST = 20; var Form1: TForm1; implementation {$R *.dfm} function SetActivateIme(sWanted: string): boolean; var iHandleCount: integer; pList: array[1..nHKL_LIST] of HKL; szImeFileName: array[0..MAX_PATH] of char; sImeFileName: string; bInstalled: boolean; i: integer; begin Result := False; sWanted := AnsiUpperCase(sWanted); // 看看是否安裝了這個輸入法 bInstalled := False; iHandleCount := GetKeyboardLayoutList(nHKL_LIST, pList); for i := 1 to iHandleCount do begin ImmGetDescription(pList[I], szImeFileName, MAX_PATH); sImeFileName := AnsiUpperCase(StrPas(szImeFileName)); if (pos(sWanted,sImeFileName)>0) or (sWanted = sImeFileName) then begin // En 時, 其值為'' bInstalled := True; Break; end; end; // 如果這個輸入法已安裝了, 讓那個輸入法的鍵盤分佈(KeyLayout)作用 if bInstalled then begin ActivateKeyboardLayout(pList[i], 0); if (sWanted = sImeFileName) then Result := False else Result := True; end; end; { of SetActivateIme } function SetKey2Ime(aObj: TWinControl): boolean; begin ImmSimulateHotKey(aObj.Handle, IME_THOTKEY_IME_NONIME_TOGGLE); result:= True; end; procedure TForm1.Edit1Enter(Sender: TObject); begin SetActivateIme('注音'); end; procedure TForm1.Edit2Enter(Sender: TObject); begin SetActivateIme('倉頡'); end; procedure TForm1.Edit3Enter(Sender: TObject); begin SetActivateIme('大易'); end; procedure TForm1.Edit4Enter(Sender: TObject); begin SetActivateIme(''); // 切回英數 end; procedure TForm1.Edit5Enter(Sender: TObject); begin if not SetActivateIme('') then // 判斷是英數時才作切換 SetKey2Ime(self); end; end.
系統時間:2024-04-17 2:54:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!