📄 in_chinese.htm
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>Delphi 下 编 程 实 现 中 文 输 入 法 </TITLE>
</HEAD>
<BODY>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">Delphi 下 编 程 实 现 中 文 输 入 法 </P>
<P ALIGN="JUSTIFY">江 苏 省 电 信 传 输 局 </P>
<P ALIGN="JUSTIFY">周 晓 </P>
<P ALIGN="JUSTIFY">---- Borland Delphi 以 其 强 大 的 功 能 及 和 高 效 的 可 视 化 开 发 环 境 为 广 大 程 序 设 计 员 所 青 睐 。 尤 其 是 它 封 装 了WINDOWS API 函 数, 能 方 便 地 利 用WINDOWS 资 源, 大 大 加 快 了 程 序 开 发 速 度。 </P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">---- 在 平 时 的 计 算 机 操 作 中, 中 文 输 入 是 不 可 避 免 的。 使 用 者 可 能 喜 欢 不 同 的 中 文 输 入 法(inputmethod editor, 简 称IME), 这 就 不 得 不 经 常 点 击 任 务 栏 中 的 中 文 图 标 或 用CTRL+Space,CTRL+Shift 热 键 切 换, 初 学 者 用 起 来 很 不 方 便。 针 对 这 一 问 题, 可 以 在 开 发 软 件 时, 在 程 序 中 设 置 用 户 喜 欢 的 中 文 输 入 法, 方 便 用 户 的 使 用。Delphi 中 只 有 少 数 控 件 如TEdit 支 持IME, 而 且 该 功 能 不 强, 不 能 在 运 行 时 更 改 输 入 法。 </P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">---- 笔 者 通 过 实 践 和 摸 索, 查 找 了 相 关 的IME 资 料, 利 用 了WINDOWS API 函 数, 实 现 了IME 的 功 能。 </P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">---- 常 用 函 数 有: </P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">API函数:BOOL ImmSimulateHotKey</P>
<P ALIGN="JUSTIFY"> (HWND hWnd,DWORD dwHotKeyID);//模拟热键</P>
<P ALIGN="JUSTIFY"> 其中Hwnd为程序窗口的句柄,dwHotHKeyID</P>
<P ALIGN="JUSTIFY"> 为模拟的热键,若成功则返回True</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> HKL GetKeyboardLayout(DWORD dwLayout);</P>
<P ALIGN="JUSTIFY"> //获得当前键盘状态</P>
<P ALIGN="JUSTIFY">	 </P>
<P ALIGN="JUSTIFY"> BOOL ImmIsIME(HKL hKL);</P>
<P ALIGN="JUSTIFY"> //判断当前是否处于中文输入状态,若是则返回True</P>
<P ALIGN="JUSTIFY"> 自定义函数:</P>
<P ALIGN="JUSTIFY"> 打开相应输入法:OpenIme(imename:string),</P>
<P ALIGN="JUSTIFY"> 例OpenIme('全拼输入法');</P>
<P ALIGN="JUSTIFY"> 关闭中文输入法:CloseIme;</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 以下是一个简单的例子,仅起参考作用。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">使用时uses中加上imm </P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">具体的实现方法及源代码如下: </P>
<P ALIGN="JUSTIFY">unit Unit1;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">interface</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">uses</P>
<P ALIGN="JUSTIFY"> Windows, Messages, SysUtils, Classes,</P>
<P ALIGN="JUSTIFY">		 Graphics, Controls, Forms, Dialogs,</P>
<P ALIGN="JUSTIFY"> StdCtrls, Buttons,imm;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">type</P>
<P ALIGN="JUSTIFY"> TForm1 = class(TForm)</P>
<P ALIGN="JUSTIFY"> ComboBox1: TComboBox;</P>
<P ALIGN="JUSTIFY"> BitBtn1: TBitBtn;</P>
<P ALIGN="JUSTIFY"> BitBtn2: TBitBtn;</P>
<P ALIGN="JUSTIFY"> BitBtn3: TBitBtn;</P>
<P ALIGN="JUSTIFY"> procedure FormShow(Sender: TObject);</P>
<P ALIGN="JUSTIFY"> procedure OpenIme(imename:string);</P>
<P ALIGN="JUSTIFY"> procedure closeIme;</P>
<P ALIGN="JUSTIFY"> procedure ComboBox1Change(Sender: TObject);</P>
<P ALIGN="JUSTIFY"> procedure BitBtn1Click(Sender: TObject);</P>
<P ALIGN="JUSTIFY"> procedure BitBtn2Click(Sender: TObject);</P>
<P ALIGN="JUSTIFY"> procedure BitBtn3Click(Sender: TObject);</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> private</P>
<P ALIGN="JUSTIFY"> { Private declarations }</P>
<P ALIGN="JUSTIFY"> public</P>
<P ALIGN="JUSTIFY"> { Public declarations }</P>
<P ALIGN="JUSTIFY"> end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">var</P>
<P ALIGN="JUSTIFY"> Form1: TForm1;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">implementation</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">{$R *.DFM}</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">procedure TForm1.FormShow(Sender: TObject);</P>
<P ALIGN="JUSTIFY">var</P>
<P ALIGN="JUSTIFY">j:integer;</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY"> for j:=0 to screen.imes.count-1 do</P>
<P ALIGN="JUSTIFY"> begin</P>
<P ALIGN="JUSTIFY"> ComBoBox1.Items.Add(screen.Imes.strings[j]);</P>
<P ALIGN="JUSTIFY">		//获取系统中已安装的中文输入法</P>
<P ALIGN="JUSTIFY"> end;</P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">procedure Tform1.OpenIme(imename:string);</P>
<P ALIGN="JUSTIFY">var</P>
<P ALIGN="JUSTIFY">I:integer;</P>
<P ALIGN="JUSTIFY">myhkl:hkl;</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY">if ImeName<>'' then</P>
<P ALIGN="JUSTIFY"> begin</P>
<P ALIGN="JUSTIFY"> if Screen.Imes.Count<>0 then</P>
<P ALIGN="JUSTIFY"> begin</P>
<P ALIGN="JUSTIFY"> I:=screen.Imes.indexof(imename);</P>
<P ALIGN="JUSTIFY"> if I>=0 then</P>
<P ALIGN="JUSTIFY"> myhkl:=hkl(screen.Imes.objects[i]);</P>
<P ALIGN="JUSTIFY"> activatekeyboardlayout(myhkl,</P>
<P ALIGN="JUSTIFY">		KLF_ACTIVATE);//设置相应的输入法</P>
<P ALIGN="JUSTIFY"> end;</P>
<P ALIGN="JUSTIFY"> end; </P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">procedure TForm1.closeime;</P>
<P ALIGN="JUSTIFY">var</P>
<P ALIGN="JUSTIFY">myhkl:hkl;</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY">myhkl:=GetKeyBoardLayOut(0);</P>
<P ALIGN="JUSTIFY">if ImmIsIME(myhkl) then </P>
<P ALIGN="JUSTIFY">	//判断是否在中文状态,若是则关闭它</P>
<P ALIGN="JUSTIFY"> immsimulateHotkey(handle,</P>
<P ALIGN="JUSTIFY"> IME_CHotKey_IME_NonIME_Toggle);</P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">procedure TForm1.ComboBox1Change(Sender: TObject);</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY">OpenIme(ComboBox1.Text);</P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">procedure TForm1.BitBtn1Click(Sender: TObject);</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY"> immsimulateHotkey(handle,</P>
<P ALIGN="JUSTIFY"> IME_CHotKey_shape_Toggle);//切换半角和全角模式</P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">procedure TForm1.BitBtn2Click(Sender: TObject);</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY"> immsimulateHotkey(handle,</P>
<P ALIGN="JUSTIFY"> IME_CHotKey_symbol_Toggle);</P>
<P ALIGN="JUSTIFY">		//切换中文标点模式和英文标点模式</P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">procedure TForm1.BitBtn3Click(Sender: TObject);</P>
<P ALIGN="JUSTIFY">begin</P>
<P ALIGN="JUSTIFY">closeime;</P>
<P ALIGN="JUSTIFY">end;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">end.</P>
<P ALIGN="JUSTIFY">---- 本 程 序 在Delphi 3.0/4.0 下 通 过。 </P></FONT></BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -