关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> API相关 ->详细
相关内容  
 
 
在Delphi程序中应用IE浏览器控件
 
【新品推荐】

  详细内容
 

Delphi下编程实现中文输入法
作者: 评价: 上站日期: 2001-09-05
内容说明:
来源:


 
江 苏 省 电 信 传 输 局 
周 晓 
---- 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 下 通 过。  免 费 订 阅 
实用技巧分类 

Office应用 
CAD 
C、C++ 
数据库应用 
Delphi 
Internet应用 
Java 
Notes应用 
操作系统应用 
PowerBuilder 
VB 
Visual Foxpro 
其他类 
上周 排行榜 
如 何 投 稿 ? 



在日常的工作生活中,我们对计算机软硬件技术的应用开发肯定有许多的心得体会,拿来和众人分享:让别人得到他们想要的,使自己找到苦苦寻觅的;小的点点滴滴,大的工程系统,这里都需要。投稿 的关键在“技巧”二字,知他人所不知,这样的稿件本栏最最欢迎! 大家公认的 好文章自然会有好的奖励。希望每个人在这里都有所收获... 



 
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> API相关 ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0