Delphi下編程實現(xiàn)中文輸入
BorlandDelphi以其強大的功能及和高效的可 視化開發(fā)環(huán)境為廣大程序設(shè)計員所青睞。尤其是它封裝了WINDOWSAPI函數(shù),能方便地利 用WINDOWS資源,大大加快了程序開發(fā)速度。 筆者通過實踐和摸索,查找了相關(guān)的IME資料,利 用了WINDOWSAPI函數(shù),實現(xiàn)了IME的功能。 HKLGetKeyboardLayout(DWORDdwLayout); 以下是一個簡單的例子,僅起參考作用。 使用時uses中加上imm 具體的實現(xiàn)方法及源代碼如下: interface uses type private var implementation {$R*.DFM} procedureTForm1.FormShow(Sender:TObject); procedureTForm1.closeime;
在平時的計算機操作中,中文輸入是不可避免的。 使用者可能喜歡不同的中文輸入法(inputmethodeditor,簡稱IME),這就不得不經(jīng)常點擊 任務(wù)欄中的中文圖標或用CTRL+Space,CTRL+Shift熱鍵切換,初學者用起來很不方便。針對 這一問題,可以在開發(fā)軟件時,在程序中設(shè)置用戶喜歡的中文輸入法,方便用戶的使用。Delphi 中只有少數(shù)控件如TEdit支持IME,而且該功能不強,不能在運行時更改輸入法。
常用函數(shù)有:
API函數(shù):BOOLImmSimulateHotKey
(HWNDhWnd,DWORDdwHotKeyID);//模擬熱鍵
其中Hwnd為程序窗口的句柄,dwHotHKeyID
為模擬的熱鍵,若成功則返回True
//獲得當前鍵盤狀態(tài)
BOOLImmIsIME(HKLhKL);
//判斷當前是否處于中文輸入狀態(tài),若是則返回True
自定義函數(shù):
打開相應輸入法:OpenIme(imename:string),
例OpenIme(全拼輸入法);
關(guān)閉中文輸入法:CloseIme;
unitUnit1;
Windows,Messages,SysUtils,Classes,
Graphics,Controls,Forms,Dialogs,
StdCtrls,Buttons,imm;
TForm1=class(TForm)
ComboBox1:TComboBox;
BitBtn1:TBitBtn;
BitBtn2:TBitBtn;
BitBtn3:TBitBtn;
procedureFormShow(Sender:TObject);
procedureOpenIme(imename:string);
procedurecloseIme;
procedureComboBox1Change(Sender:TObject);
procedureBitBtn1Click(Sender:TObject);
procedureBitBtn2Click(Sender:TObject);
procedureBitBtn3Click(Sender:TObject);
{Privatedeclarations}
public
{Publicdeclarations}
end;
Form1:TForm1;
var
j:integer;
begin
forj:=0toscreen.imes.count-1do
begin
ComBoBox1.Items.Add(screen.Imes.strings[j]);
//獲取系統(tǒng)中已安裝的中文輸入法
end;
end;
procedureTform1.OpenIme(imename:string);
var
I:integer;
myhkl:hkl;
begin
ifImeName<>then
begin
ifScreen.Imes.Count<>0then
begin
I:=scr .Imes.indexof(imename);
ifI>=0then
myhkl:=hkl(screen.Imes.objects[i]);
activatekeyboardlayout(myhkl,
KLF_ACTIVATE);//設(shè)置相應的輸入法
end;
end;
end;
var
myhkl:hkl;
begin
myhkl:=GetKeyBoardLayOut(0);
ifImmIsIME(myhkl)then
//判斷是否在中文狀態(tài),若是則關(guān)閉它
immsimulateHotkey(handle,
IME_CHotKey_IME_NonIME_Toggle);
end;
procedureTForm1.ComboBox1Change(Sender:TObject);
begin
OpenIme(ComboBox1.Text);
end;
procedureTForm1.BitBtn1Click(Sender:TObject);
begin
immsimulateHotkey(handle,
IME_CHotKey_shape_Toggle);//切換半角和全角模式
end;
procedureTForm1.BitBtn2Click(Sender:TObject);
begin
immsimulateHotkey(handle,
IME_CHotKey_symbol_Toggle);
//切換中文標點模式和英文標點模式
end;
procedureTForm1.BitBtn3Click(Sender:TObject);
begin
closeime;
end;
end.