时间: 2021-07-31 作者:daque
江 苏 省 电 信 传 输 局 周 晓 ---- borland delphi 以 其 强 大 的 功 能 及 和 高 效 的 可 视 化 开 发 环 境 为 广 大 程 序 设 计 员 所 青 睐 。 尤 其 是 它 封 装 了windows api 函 数, 能 方 便 地 利 用windows 资 源, 大 大 加 快 了 程 序 开 发 速 度。 ---- 在 平 时 的 计 算 机 操 作 中, 中 文 输 入 是 不 可 避 免 的。 使 用 者 可 能 喜 欢 不 同 的 中 文 输 入 法(inputmethod editor, 简 称ime), 这 就 不 得 不 经 常 点 击 任 务 栏 中 的 中 文 图 标 或 用ctrl+space,ctrl+shift 热 键 切 换, 初 学 者 用 起 来 很 不 方 便。 针 对 这 一 问 题, 可 以 在 开 发 软 件 时, 在 程 序 中 设 置 用 户 喜 欢 的 中 文 输 入 法, 方 便 用 户 的 使 用。delphi 中 只 有 少 数 控 件 如tedit 支 持ime, 而 且 该 功 能 不 强, 不 能 在 运 行 时 更 改 输 入 法。 ---- 笔 者 通 过 实 践 和 摸 索, 查 找 了 相 关 的ime 资 料, 利 用 了windows api 函 数, 实 现 了ime 的 功 能。 ---- 常 用 函 数 有: api因变量:bool immsimulatehotkey (hwnd hwnd,dword dwhotkeyid);//模仿热键 个中hwnd为步调窗口的句柄,dwhothkeyid 为模仿的热键,若胜利则归来true hkl getkeyboardlayout(dword dwlayout); //赢得暂时键盘状况 bool immisime(hkl hkl); //确定暂时能否居于华文输出状况,假如则归来true 自设置因变量: 翻开相映输出法:openime(imename:string), 例openime('全拼输出法'); 封闭华文输出法:closeime; 以次是一个大略的例子,仅起参考效率。 运用时uses中加上imm 简直的实行本领及源代码如次: unit unit1; interface uses windows, messages, sysutils, classes, graphics, controls, forms, dialogs, stdctrls, buttons,imm; type tform1 = class(tform) combobox1: tcombobox; bitbtn1: tbitbtn; bitbtn2: tbitbtn; bitbtn3: tbitbtn; procedure formshow(sender: tobject); procedure openime(imename:string); procedure closeime; procedure combobox1change(sender: tobject); procedure bitbtn1click(sender: tobject); procedure bitbtn2click(sender: tobject); procedure bitbtn3click(sender: tobject); private { private declarations } public { public declarations } end; var form1: tform1; implementation {$r *.dfm} procedure tform1.formshow(sender: tobject); var j:integer; begin for j:=0 to screen.imes.count-1 do begin combobox1.items.add(screen.imes.strings[j]); //获得体例中已安置的华文输出法 end; end; procedure tform1.openime(imename:string); var i:integer; myhkl:hkl; begin if imename<>'' then begin if screen.imes.count<>0 then begin i:=screen.imes.indexof(imename); if i>=0 then myhkl:=hkl(screen.imes.objects[i]); activatekeyboardlayout(myhkl, klf_activate);//树立相映的输出法 end; end; end; procedure tform1.closeime; var myhkl:hkl; begin myhkl:=getkeyboardlayout(0); if immisime(myhkl) then //确定能否在华文状况,假如则封闭它 immsimulatehotkey(handle, ime_chotkey_ime_nonime_toggle); end; procedure tform1.combobox1change(sender: tobject); begin openime(combobox1.text); end; procedure tform1.bitbtn1click(sender: tobject); begin immsimulatehotkey(handle, ime_chotkey_shape_toggle);//切换半角和全角形式 end; procedure tform1.bitbtn2click(sender: tobject); begin immsimulatehotkey(handle, ime_chotkey_symbol_toggle); //切换华文圈点形式和英文圈点形式 end; procedure tform1.bitbtn3click(sender: tobject); begin closeime; end; end. ---- 本 程 序 在delphi 3.0/4.0 下 通 过。