摘要载入中…    请稍等…












内容载入中…    请稍等…

如长时间看不到内容,请关闭浏览器,重新打开此页!

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术QQ群:65314343
 ★★photoshop学友-10万图书免费看★★
 位置:编程开发>Deiphi>Deiphi实例教程
◎→ 本类最新
“Delphi 书评”
实现应用程序的文件拖放功能
当Dephi遇到Word
编写个人Internet上网计费软件
变速齿轮Delphi实现
Delphi自定义消息应用一例
Microsoft Agent技术在Delphi中的
MIDAS中动态强制约束编程
Chuck Jazdzewski的离开意味着De
OICQ中用户图标选择的实现
◎→ 相关资源
VB窗体文章
HTML入门教程
JavaScript入门教程
VbScript入门教程
ASP.net入门教程
C语言入门教程
Deiphi实例教程
Deiphi窗体文章
Deiphi数据库编程
Deiphi网络编程
◎→ 热门资源
得到已安装的应用程序列表
定制系统菜单
SEO实践增加外链方法
播放背景音乐
捕捉来自Thread的异常
程序调用控制面板设置
常用文件目录操作
采用多线程技术来关闭applicatio
不用注册新部件就能增加新的方法
不用MediaPlayer播放Midi

Delphi下编程实现中文输入法


日期:2008-5-31 18:22:58    来源:
   
 -->编程实现拨号网络连接及FTP应用
 -->百度,开始不懂中文!
 -->将推腾讯QQ拼音输入法!

Delphi下编程实现中文输入法


江 苏 省 电 信 传 输 局  

周 晓  

---- 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 下 通 过。

 [1]

编程实现墙纸平铺/居中或拉伸

用Photoshop去除照片中文字的几个基本技法

如何用api检查任务栏中有多少种输入法

--->CHM浏览器(CHM Explorer) V1.8.0.180┊批量反编译CHM文件┊简体中文绿色特别版
--->UltraEdit 12.10a 官方简体中文版
--->OFFICE2000简体中文正式版
--->EmEditor 简体中文插件集 Build 5
--->UUSEE 悠视网络电视 V2.0.0.11┊网络电视完全大众版软件┊简体中文绿色特别版
Tags:  编程 中文 输入法



芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们