unit Ime;
{======================================================================= DESIGN BY : 彭国辉 DATE: 2004-10-12 SITE: http://kacarton.yeah.net/ BLOG: http://blog.csdn.net/nhconch EMAIL: kacarton@sohu.com
文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持! ========================================================================}
interface
uses IMM, Windows;
procedure ImmActive(hWindows: THandle; bChinese: Boolean); //打开或关闭输入法 procedure ImmEnabled(hWindows: THandle; bChinese: Boolean); //允许或禁止输入法 procedure SendDBCSString(hFocus: HWND; const Text: string); //向控件发送中文文本
implementation
//打开或关闭输入法,EX:ImeActive(0, true); //网上可以搜索到类似的代码,不过用的是IME_THOTKEY_IME_NONIME_TOGGLE,只对繁体版中文Windows有效,用在简体中文Windows下当然不行了 procedure ImmActive(hWindows: THandle; bChinese: Boolean); begin if hWindows=0 then hWindows := GetFocus; if hWindows=0 then Exit; if ImmIsIME(GetKeyboardLayOut(0)) <> bChinese then ImmSimulateHotKey(hWindows, IME_CHOTKEY_IME_NONIME_TOGGLE); end;
//允许与禁止输入法,EX:ImmEnabled(Edit1.Handle, true) //等效于把Edit1.ImeMode设为imChinese(True)、imClose(False) procedure ImmEnabled(hWindows: THandle; bChinese: Boolean); var hImmc: HIMC; begin if hWindows=0 then hWindows := GetFocus; if hWindows=0 then Exit; hImmc := ImmGetContext(hWindows); ImmSetOpenStatus(hImmc, bChinese); end;
//向控件发送中文文本,EX:SendDBCSString(Edit1.Handle, ''''哗,终于可以发中文啦!'''') procedure SendDBCSString(hFocus: HWND; const Text: string); var i: integer; ch: byte; begin if hFocus = 0 then hFocus := GetFocus; if hFocus = 0 then Exit; i := 1; while i <= Length(Text) do begin ch := byte(Text[i]); if Windows.IsDBCSLeadByte(ch) then begin Inc(i); SendMessage(hFocus, WM_IME_CHAR, MakeWord(byte(Text[i]), ch), 0); end else SendMessage(hFocus, WM_IME_CHAR, word(ch), 0); Inc(i); end; end;
end.
没有相关教程
|