⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 in_chinese.htm

📁 对于学习很有帮助
💻 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">&#9;    </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">&#9;&#9; 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">&#9;&#9;//获取系统中已安装的中文输入法</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&lt;&gt;'' then</P>
<P ALIGN="JUSTIFY">  begin</P>
<P ALIGN="JUSTIFY">  if Screen.Imes.Count&lt;&gt;0 then</P>
<P ALIGN="JUSTIFY">    begin</P>
<P ALIGN="JUSTIFY">    I:=screen.Imes.indexof(imename);</P>
<P ALIGN="JUSTIFY">    if I&gt;=0 then</P>
<P ALIGN="JUSTIFY">      myhkl:=hkl(screen.Imes.objects[i]);</P>
<P ALIGN="JUSTIFY">      activatekeyboardlayout(myhkl,</P>
<P ALIGN="JUSTIFY">&#9;&#9;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">&#9;//判断是否在中文状态,若是则关闭它</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">&#9;&#9;//切换中文标点模式和英文标点模式</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 + -